【问题标题】:Ninject Injection Issues in ASP.NET MVC 3ASP.NET MVC 3 中的 Ninject 注入问题
【发布时间】:2011-06-21 17:10:04
【问题描述】:

我有三个将使用 DI 的项目。我的项目是一个 ASP.NET MVC 3 站点。我从 nuget 安装了 ninject MVC 包,它添加了我的引导程序。我注册了绑定。

NinjectMVC3.cs

        private static void RegisterServices(IKernel kernel)
        {
            kernel.Bind<IUserService>().To<UserService>();
        }   

我有一个单独的项目,其中包含 UserService 和 IUserService。在那个项目中,我还有一个单例工厂类来创建我的服务。

public class ServiceFactory : BaseFactory<ServiceFactory>
    {
        [Inject]
        public IUserService UserService { get; set; }
    }

当我调用ServiceFactory.Instance.UserService时,上面总是为null的原因是什么?

【问题讨论】:

    标签: asp.net-mvc-3 dependency-injection singleton ninject ninject-2


    【解决方案1】:

    猜测:很可能工厂不是由 Ninject 创建的。

    但是由于在进行依赖注入时无论如何都不应该使用单例模式,所以这应该很容易解决。

    1. IUserService 传递给任何需要知道它的对象的构造函数。
    2. 将其绑定为单例kernel.Bind&lt;IUserService&gt;().To&lt;UserService&gt;().InSingletonScope();

    【讨论】:

    • 好吧,我转而使用此链接shahnawazk.com/2010/12/…,但我仍然得到一个空值。内核设置受到打击。此外,我可能在一个控制器上有多个服务,并且不想在其中有 5 或 6 个参数。我宁愿做属性注入。
    • 我有点困惑。该链接不建议使用单例模式。另外,如果你对你的构造函数有很多依赖,这很可能不是构造函数注入的问题,而是你没有正确遵循单一责任原则。
    • 此外,我成功地将github.com/ninject/ninject.web.mvc/wiki/MVC3 用作 Ninject 的 MVC 引导程序
    • 我通过添加一个以 IUserService 作为参数的构造函数来解决这个问题,并且它起作用了。我将遵循单一责任原则的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多