Dies wird nicht funktionieren. Durch Ersetzen des Standard-Tag-Helfer-Aktivators haben Sie die Auflösung von alle-Tag-Helfer zu Simple Injector umgeleitet, aber es gibt eingebaute Tag-Helfer, die den eingebauten Container benötigen, um aufgelöst zu werden.
Stattdessen v3.3 des SimpleInjector.Integration.AspNetCore.Mvc NuGet Paket ermöglicht es Ihnen, ein benutzerdefiniertes Tag Helfer-Aktivator mit der AddSimpleInjectorTagHelperActivation
Extension-Methode registrieren Sie wie folgt vor:
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc();
services.AddSimpleInjectorTagHelperActivation(container);
// rest of your configuration
}
Die Erweiterung Methode kümmert sich um die Filterung von Tag-Helfer. Wenn sich ein angeforderter Tag-Helfer in einer Assembly befindet, die mit "Microsoft" beginnt, wird die Anforderung für den Tag-Helfer an den integrierten Tag-Helfer-Aktivator weitergeleitet. Andernfalls wird das mitgelieferte container
aufgefordert, den Typ zu erstellen.
Sie können dieses Standardverhalten außer Kraft setzen, indem Sie eine benutzerdefinierte Prädikat zum AddSimpleInjectorTagHelperActivation
Methode liefert:
services.AddSimpleInjectorTagHelperActivation(container,
type => type.Namespace.StartsWith("MyApplication"));
Anwendung das Prädikat erforderlich wird, wenn Sie 3rd-Party-Bibliotheken beginnen, die ihre eigenen Tag-Helfer-Plug-in. In diesem Fall schlägt der Standardfilter für Tags im Namespace "Microsoft" fehl.
Alternativ können Sie auch direkt die SimpleInjectorTagHelperActivator
verwenden, beachten Sie jedoch, dass dies komplizierter zu registrieren ist. Sie sollten in der Regel die AddSimpleInjectorTagHelperActivation
Erweiterungsmethode verwenden statt:
services.AddSingleton<ITagHelperActivator>(p =>
new SimpleInjectorTagHelperActivator(
container,
type => type.Namespace.StartsWith("MyApplication"),
new DefaultTagHelperActivator(p.GetService<ITypeActivatorCache>())));
Haben Sie versucht, services.AddMvc in ConfigureServices Methode hinzufügen –