在 MVC 的基本 Controller 中,我有以下注入(inject)代码,它运行良好。
[Inject]
private INavigationRepository navigationRepository { get; set; }
[Inject]
private ISessionService sessionService { get; set; }
我没有收到构建错误,它在“死亡黄页”中显示为“System.NullReferenceException:对象引用未设置为对象的实例”。并指向引用navigationRepository 的第一行代码。
自从它工作以来,我的代码更改可能很少,甚至支持这些更改,但仍然出现错误。我可以用下面的代码解决它,但我失去了注入(inject)。关于如何解决这个问题的任何想法?
private INavigationRepository navigationRepository;
private ISessionService sessionService;
public BaseController()
{
navigationRepository = new NavigationRepository();
sessionService = new SessionService(new VolunteerRepository());
}
最佳答案
Ninject 可以注入(inject)私有(private)属性,但必须启用。
new StandardKernel( new NinjectSettings() { InjectNonPublic = true })
但更好的是不使用属性注入(inject)。只有在无法避免的情况下才应该使用它。例如。如果实例是由其他人(AttributeFilter)创建的。否则,可能会无意中从外部设置依赖项,并且您需要 Inject 属性来为您提供对 IoC 容器的引用。我建议将依赖项添加到构造函数并使用构造函数注入(inject)。
关于asp.net-mvc - Ninject 停止注入(inject)我的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4293021/