Могу ли я использовать ninject для изменения реализации на лету?

Используя ninject, я знаю, что могу привязываться к определенной реализации, так что всякий раз, когда я это делаю:

ISomeCache myCache = Ninject.Get<ISomeCache>();

Он загрузит мою конкретную реализацию, к которой я привязываю ninject.

Скажем, я сохраняю конкретную реализацию, которую хочу использовать, в базе данных (веб-приложение), и когда я меняю ее в панели администратора, она должна на лету использовать нужный мне класс.

Это возможно?


person mrblah    schedule 30.09.2009    source источник


Ответы (1)


Пока вы можете определить контекст, в котором вы выполняете, да, вы можете это сделать.

kernel.Bind<IMyService>().To<MyUserService>().When(request => GetSiteContext() == "user");

kernel.Bind<IMyService>().To<MyAdminService>().When(request => GetSiteContext() == "admin");

где GetSiteContext — это метод, который вы должны написать, чтобы определить, в каком контексте вы выполняете. .When(...) принимает Func<IRequest,bool> в качестве параметра (равного Predicate<IRequest>).

person Ian Davis    schedule 30.09.2009