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; }