asp.net-mvc - Ninject 停止注入(inject)我的属性

标签 asp.net-mvc ninject

在 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/

相关文章:

ninject - 为什么从 NuPack 生成的 NinjectMVC3.cs 无法编译? (或者 ASP.NET MVC 3 Beta 中的 MvcServiceLocator 发生了什么?)

asp.net-mvc - 使用 Ninject.MVC3 nuget 包正确设置 ASP.NET MVC 3 应用程序

jquery - 使用 jQuery 动态创建的标签在我的表单发布后消失

asp.net-mvc - 如何在现有的 .NET MVC 项目中启用/使用/配置 WebAssembly Blazor?

asp.net-mvc - Ninject 返回对象的特定实例

wpf - 使用 PRISM 和 MVVM 的 ViewModel 的参数化构造函数

C# Linq 到 SQL :cannot add an entity that already exists

javascript - 使用ajax javascript将一个int数组传递给MVC Controller

asp.net-mvc - 什么验证码系统与 ASP.NET MVC 兼容?

c# - Ninject - 自动绑定(bind)从通用基类继承的程序集中的所有类(后者又实现通用接口(interface))