2009-09-30 3 views
3

En utilisant ninject, je sais que je peux lier à une certaine mise en œuvre, de sorte que je whenver:Puis-je utiliser ninject pour modifier les implémentations à la volée?

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

Il chargera ma mise en œuvre concrète que je liant ninject à. Disons que je stocke l'implémentation concrète que je veux utiliser dans la base de données (application web), et quand je la change dans le panneau d'administration, elle doit utiliser à la volée la classe que je veux.

Est-ce possible?

Répondre

5

Tant que vous pouvez déterminer le contexte dans lequel vous exécutez, oui vous pouvez le faire.

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

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

où GetSiteContext est une méthode que vous écrivez pour déterminer quel contexte vous exécutez dans. .When(...) prend un Func<IRequest,bool> comme paramètre (égal à Predicate<IRequest>).

Questions connexes