Внедрение зависимости через параметр метода - PullRequest
0 голосов
/ 04 мая 2011

Я уже сделал все привязки.Теперь моя проблема заключается в получении окончательной привязки для работы со свойством статического метода.

Например:

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 ]

1 голос
/ 05 мая 2011

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);
1 голос
/ 04 мая 2011

Если ваш DatabaseInitializer принимает параметр конструктора IUserService, вы можете использовать Ninject для разрешения экземпляра:

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

Entity Framework не имеет никакой встроенной поддержки DI черезIoC / SL (насколько мне известно), что означает, что вам придется обрабатывать передачу этого значения в DbDatabase.SetInitializer вызов самостоятельно.

...