通过方法参数注入依赖项

时间:2011-05-04 17:07:02

标签: asp.net-mvc asp.net-mvc-3 ninject

我已经完成了所有绑定。我现在的问题是让最后的绑定工作在静态方法属性上。

例如:

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 */);

2 个答案:

答案 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);