Ich habe meine Abhängigkeitsinjektion unter Verwendung SimpleInjector in der gleichen Weise wie vorgestellt here eingerichtet. Leider löst eine Ausnahme RegisterMvcViewComponents
auf dem Container-Objekt aufrufen:Wie IViewComponentDescriptorProvider in .NET Core registrieren?
Kein Service für Typ ‚Microsoft.AspNetCore.Mvc.ViewComponents.IViewComponentDescriptorProvider‘ wurde registriert.
Hat der Container eine entsprechende Methode zur Registrierung des Anbieters? Oder sollte es anders gemacht werden?
Der Code:
public class Startup
{
private Container _container = new Container();
public void ConfigureServices(IServiceCollection services)
{
services.InitializeTestData();
services.AddMvcCore();
services.AddSingleton<IControllerActivator>(new SimpleInjectorControllerActivator(_container));
services.AddSingleton<IViewComponentActivator>(new SimpleInjectorViewComponentActivator(_container));
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseSimpleInjectorAspNetRequestScoping(_container);
_container.Options.DefaultScopedLifestyle = new AspNetRequestLifestyle();
InitializeContainer(app);
_container.Verify();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc(routes =>
{
routes.MapRoute(
name: "Default",
template: "{controller=Home}/{action=Index}/{id?}"
);
});
}
private void InitializeContainer(IApplicationBuilder app)
{
_container.RegisterMvcControllers(app);
_container.RegisterMvcViewComponents(app);
_container.Register<IDbContext>(() => new DbContext("GuitarProject"));
_container.Register<IJournalEntryRepository, JournalEntryRepository>();
}
}
Stack-Trace (die Art der Ausnahme ist InvalidOperationException
):
bei Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService (IServiceProvider Anbieter, Typ Servicetype) um Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService [T] (IServiceProvider Provider) um SimpleInjector.SimpleInjectorAspNetCoreMvcIntegrationExtensions.RegisterMvcViewComponents (Container Behälter, IApplicationBuilder Application) bei ProjectX.Startup.InitializeContainer (IApplicationBuilder app)
Können Sie den kompletten Stack Trace veröffentlichen? – Steven
@Steven Stack-Trace hinzugefügt. – Kapol