Ninject Stopped Injecting My Properties
В базовом контроллере для MVC у меня был следующий код инъекции, и он работал отлично.
[Inject]
private INavigationRepository navigationRepository { get; set; }
[Inject]
private ISessionService sessionService { get; set; }
Я не получаю ошибки сборки, и он появляется на желтой странице смерти как "System.NullReferenceException: ссылка на объект не установлена в экземпляр объекта". и указывает на первую строку кода, которая ссылается на navigationRepository.
У меня очень мало изменений кода, так как он работал, и даже поддерживал эти изменения, но все равно получал ошибку. Я могу обойти это с помощью кода ниже, но я теряю инъекцию. Любые мысли о том, как справиться с этим?
private INavigationRepository navigationRepository;
private ISessionService sessionService;
public BaseController()
{
navigationRepository = new NavigationRepository();
sessionService = new SessionService(new VolunteerRepository());
}
Ответы
Ответ 1
Ninject может вводить частные свойства, но он должен быть включен.
new StandardKernel( new NinjectSettings() { InjectNonPublic = true })
Но гораздо лучше не использовать инъекцию свойств. Его следует использовать только в том случае, если нет способа избежать этого. Например. если предмет создается кем-то другим (AttributeFilter). В противном случае зависимости могут быть установлены непреднамеренно извне, и вам нужен атрибут Inject, который дает вам ссылку на контейнер IoC. Я бы предложил добавить зависимости к конструктору и использовать инъекцию конструктора.
Ответ 2
Изменение свойств для работы с общественностью. Я думаю, если он является приватным, Ninject не может его установить.
[Inject]
public INavigationRepository navigationRepository { get; set; }
[Inject]
public ISessionService sessionService { get; set; }