Utilisation de l'injection de propriété au lieu de l'injection du constructeur
Longue histoire courte, je suis en train d'utiliser ELMAH avec MVC 2 et Ninject, et j'ai besoin d'utiliser sans paramètre constructeurs. J'ai créé un premier post à ce sujet ici: À l'aide d'un sans paramètre contrôleur de constructeur avec Ninject?
M'a conseillé d'utilisation de la propriété de l'injection à la place du constructeur d'injection. J'ai donc déménagé à partir de ce:
public class DepartmentsController : Controller
{
private IDepartmentsRepository departmentsRepository;
public DepartmentsController(IDepartmentsRepository departmentsRepository)
{
this.departmentsRepository = departmentsRepository;
}
...
}
:
public class DepartmentsController : Controller
{
private IDepartmentsRepository _departmentsRepository;
[Inject]
public IDepartmentsRepository DepartmentsRepository
{
get { return _departmentsRepository; }
set { _departmentsRepository = value; }
}
...
}
Mais dans mes autres fonctions de contrôleur, si je tente d'accéder à DepartmentsRepository ou _departmentsRepository, je reçois un objet de référence non définie à une instance d'un objet erreur quand je tente d'y accéder.
Est-il autre chose que je dois faire ici?
source d'informationauteur Steven
Vous devez vous connecter pour publier un commentaire.
J'ai eu un problème similaire. Jetez un oeil à mes questions: À l'aide de Ninject avec l'Adhésion.Fournisseur.
Fondamentalement, lorsque vous utilisez
DepartmentsController
vous avez besoin d'injecterthis
(c'est à dire votre ministères contrôleur dans votre Ninject kernel. Donc, c'est quelque chose comme:Où NinjectHelper dans ce cas, obtient la Ninject Noyau.
Essayer quelque chose comme cela:
Mondiale.asax.cs
MyDependencyResolver.cs
MyModule.cs
Il pourrait y avoir 2 raisons pour objet de référence non définie exception.
1) Ninject ne sais pas comment Lier IDepartmentsRepository à une mise en œuvre concrète de DepartmentsRepository ( je doute que ce soit le cas )
2) Si vous tentez d'accéder DepartmentsRepository propriété dans le constructeur du contrôleur, il va jeter l'exception (depuis Ninject est seulement en mesure d'injecter les Dépendances de la Propriété après que l'objet est construit).
Espère que ça aide.
Comme Daniel T. dans le commentaire ci-dessus, vous devriez vérifier
Ninject.Web.Mvc
. Si vous utilisez le NinjectHttpApplication dans ce projet, il sera autowire tout pour vous, de sorte que lorsque le NinjectControllerFactory construit un nouveau contrôleur, ce qui fera appel à Injecter() pour le remplissage de la propriété des injections.