Ciao sto usando Simple Injector per la mia domanda DI. Ho mantenuto il DI predefinito per il framework DI.
Ma ho bisogno di registrare il DbContext
con SimpleInjector. Quando eseguo l'applicazione
container.Verify()
Dà il seguente errore
ActivationException: il costruttore del tipo UsersDbContext contiene il parametro con il nome "options" e digita DbContextOptions che non è registrato. Assicurarsi che DbContextOptions sia registrato o modificare il costruttore di UsersDbContext.
Sto registrando DbContext con SimpleInjectore in una funzione SimpleInjectorConfig.InitializeContainer(app, _container)
// DbContext
container.Register<DbContext, UsersDbContext>();
E la mia partenza è
public void ConfigureServices(IServiceCollection services)
{
var conString = Configuration.GetConnectionString("DefaultConnection");
// Add framework services.
services.AddDbContext<UsersDbContext>(options => options.UseSqlServer(conString));
services.AddIdentity<User, IdentityRole>()
.AddEntityFrameworkStores<UsersDbContext>()
.AddDefaultTokenProviders();
IdentityConfigurationService.ConfigureIdentityOptions(services);
services.AddMvc();
// Add application services
services.AddSingleton<IControllerActivator>(new SimpleInjectorControllerActivator(_container));
services.AddSingleton<IViewComponentActivator>(new SimpleInjectorViewComponentActivator(_container));
services.UseSimpleInjectorAspNetRequestScoping(_container);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
SimpleInjectorConfig.InitializeContainer(app, _container);
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
_container.Verify();
app.UseMvc();
}
So che il problema riguarda le opzioni, ma non so come Simple Injector abbia bisogno della stringa di connessione predefinita registrata nel container. È qualcosa che può essere passato a Simple Injector? o dovrei usare DbContextFactory
per passare la stringa di connessione a UserDbContext
?
Devi dire a SimpleInjector come creare un'istanza di UsersDbContext
che sembra avere un costruttore con il parametro di tipo DbContextOptions
.
Cambia la modalità di registrazione del tuo DbContext
utilizzando un overload del metodo Register
che DbContext
un parametro delegato (factory) come di seguito:
container.Register<DbContext>(() => {
var options = // Configure your DbContextOptions here
return new UsersDbContext(options);
});
Tutte le risposte non funzionano per me, ma ho trovato un altro approccio.
container.CrossWire<IntellisenseDbContext>(app);
Funziona