我已经完成了所有绑定。我现在的问题是让最后的绑定工作在静态方法属性上。
例如:
Bind<IUserService>().To<UserService>();
Bind<IUserRepository>().To<SqlServerUserRepository>().InRequestScope();
Bind<IDatabaseInitializer<EconoDb>>().To<DatabaseInitializer>();
//Problem here. How do I inject the user service here?
DbDatabase.SetInitializer(/*IDatabaseInitializer goes here */);
答案 0 :(得分:1)
如果DatabaseInitializer
接受IUserService
构造函数参数,则可以使用Ninject来解析实例:
var initializer = kernel.Get<IDatabaseInitializer<EconoDb>>()
DbDatabase.SetInitializer(initializer);
实体框架没有通过IoC / SL对DI进行任何开箱即用的支持(据我所知),这意味着您必须自己将该值传递给DbDatabase.SetInitializer
调用
答案 1 :(得分:1)
HY 你可以使用OnActivation。
Bind<IUserService>().To<UserService>();
Bind<IUserRepository>().To<SqlServerUserRepository>().InRequestScope();
Bind<IDatabaseInitializer<EconoDb>>().To<DatabaseInitializer>()
.OnActivation(initializer => DbDatabase.SetInitializer(initializer));
或简短版
Bind<IDatabaseInitializer<EconoDb>>().To<DatabaseInitializer>()
.OnActivation(DbDatabase.SetInitializer);