J'ai le code suivant:Injection Propriété sans attributs à l'aide Ninject dans un contrôleur de base abstraite dans MVC3
public abstract class BaseController : Controller
{
public IUserService UserService { get; set; }
}
Tous mes contrôleurs héritent de ce contrôleur de base. J'ai commencé par le configurer dans Ninject en utilisant le code suivant:
kernel.Bind<BaseController>()
.ToSelf()
.WithPropertyValue("UserService", x => x.Kernel.GetService(typeof(IUserService)));
Cela n'a pas fonctionné. Je suppose que c'est parce que le BaseController est une classe abstraite (veuillez confirmer mon hypothèse). Donc, je suis passé à modifier la configuration pour:
kernel.Bind<HomeController>()
.ToSelf()
.WithPropertyValue("UserService", x => x.Kernel.GetService(typeof(IUserService)));
Cela ne fonctionne pas. L'inconvénient mineur est que je dois maintenant configurer chaque contrôleur de la même manière.
Depuis que j'ai aussi la configuration DependencyResolver dans mon projet ASP.NET MVC 3 Je pourrais également supprimer la configuration ci-dessus Ninject et modifier mon contrôleur de base pour ressembler à:
public IUserService UserService
{
get
{
return DependencyResolver.Current.GetService<IUserService>();
}
}
Y at-il avantage à utiliser le fluent configuration par opposition à l'utilisation de l'approche DependencyResolver? Est-ce que l'un est meilleur que l'autre? Quelle approche serait considérée comme une meilleure pratique?
Il est à noter que je ne voulais pas faire d'injection de constructeur dans mon contrôleur de base.
Cette question n'a-t-elle pas déjà été posée et a-t-elle reçu une réponse dans [Injection de propriété dans le contrôleur de base à l'aide de Ninject 2] (http://stackoverflow.com/questions/3154240/property-injection-in-base-controller-using-ninject -2 /), quoique sous une forme légèrement différente. – mrydengren
Cette question implique le DependencyResolver dans MVC 3 que le précédent n'a pas. La question est aussi quelle est la meilleure approche par opposition à comment faites-vous cela. – Thomas
MVC3/DependencyResolver ne change absolument rien –