2011-05-04 33 views
0

我已經完成了所有的綁定。我現在的問題是獲取最終的綁定來處理靜態方法屬性。通過方法參數注入依賴關係

對於如:

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

回答

1

如果您DatabaseInitializer接受IUserService構造函數的參數,你可以使用Ninject來解決實例:

var initializer = kernel.Get<IDatabaseInitializer<EconoDb>>() 
DbDatabase.SetInitializer(initializer); 

實體框架沒有任何開箱通過IoC/SL支持DI(據我所知),這意味着您必須自己處理將該值傳遞給DbDatabase.SetInitializer

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); 
相關問題