J'ai une application Blazor (serveur) qui fonctionne parfaitement bien et qui adhère à toutes les règles définies par Microsoft.CodeAnalysis.FxCopAnalyzers
et StyleCop.Analyzers
.
Une page de rasoir fortement coupée est la suivante:
@inherits OwningComponentBase<MyService>
@inject IModalService ModalService
@inject IJSRuntime JSRuntime
// UI code
@code
{
private readonly CancellationTokenSource TokenSource = new CancellationTokenSource();
ElementReference myElementReferenceName;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await this.myElementReferenceName.FocusAsync(this.JSRuntime);
}
protected override async Task OnInitializedAsync()
{
....
}
public void Dispose()
{
this.TokenSource.Cancel();
}
protected void ShowModalEdit(object someObject)
{
.....
Modal.Show<MyPage>("Edit", parameters);
}
}
Note n ° 1: J'ai utilisé @inherits OwningComponentBase<MyService>
Basé sur suggestion de Daniel Roth
Note n ° 2: J'utilise le composant modal de Chris Saintyy Composant
Cependant, lorsque j'essaie de déplacer tout le code de la @code {...}
section à un "code derrière" classe partielle ("mypage.razor.cs"), puis je rencontre les erreurs suivantes ....
"Mypage" ne contient pas de définition pour "service" et aucune méthode d'extension accessible 'Service' acceptant .....
'Mypage.onafterrenderasync (bool)': pas de méthode appropriée trouvée à remplacer
'Mypage.onInitializeAsync ()': aucune méthode appropriée trouvée pour remplacer
Le type 'mypage' ne peut pas être utilisé comme paramètre de type 'T' dans le type générique ou la méthode 'imodalservice.show (chaîne, modalparameters, modaloptions)'. Il n'y a pas de conversion de référence implicite de "mypage" sur "Microsoft.aspnetcore.components.componentbase".
Suggestions?
Je suis tombé sur cette erreur lorsque j'ai utilisé une approche de classe partielle et j'essayais d'une identité d'échafaudage. J'ai changé en classe de base Aproach, il a été résolu.
la classe partielle que j'utilisais après ajout d'un composant dit à MyComponent, ajoutez une classe myComponent.Razor.cs pour une utilisation des services d'injection
[Injecter] services d'immeubles publics {obtenir; ensemble; }
pour approche de la classe de base
après avoir ajouté A Après ajout d'un composant, dites à MyComponent, ajoutez une classe myComponent.Razor.cs Modifiez le nom de la classe et faites-la hériter de ComponentBase MyComponentBase: ComponentBase
et placez ceci en haut de myComponent.Razor
@inherits MyComponentBase
Utilisez un mot-clé protégé pour rendre vos méthodes accessibles