Asp.net mvc 3 ASP.NET MVC 3中的Ninject注入问题

Asp.net mvc 3 ASP.NET MVC 3中的Ninject注入问题,asp.net-mvc-3,dependency-injection,singleton,ninject,ninject-2,Asp.net Mvc 3,Dependency Injection,Singleton,Ninject,Ninject 2,我有三个项目将使用DI。我的项目是一个ASP.NETMVC3网站。我从nuget安装了ninject MVC包,它添加了我的引导程序。我登记了我的装订 NinjectMVC3.cs private static void RegisterServices(IKernel kernel) { kernel.Bind<IUserService>().To<UserService>(); } 私有静

我有三个项目将使用DI。我的项目是一个ASP.NETMVC3网站。我从nuget安装了ninject MVC包,它添加了我的引导程序。我登记了我的装订

NinjectMVC3.cs

        private static void RegisterServices(IKernel kernel)
        {
            kernel.Bind<IUserService>().To<UserService>();
        }   
私有静态无效注册服务(IKernel内核)
{
kernel.Bind().To();
}   
我有一个单独的项目,其中包含UserService和IUserService。在那个项目中,我还有一个单例工厂类来创建我的服务

public class ServiceFactory : BaseFactory<ServiceFactory>
    {
        [Inject]
        public IUserService UserService { get; set; }
    }
公共类服务工厂:BaseFactory
{
[注入]
公共IUserService用户服务{get;set;}
}

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

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

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

  • IUserService
    传递给需要知道它的任何对象的构造函数
  • 将其绑定为Singleton
    kernel.Bind().To().InSingletonScope()

  • 好吧,我切换到做这个链接,但我仍然得到一个空值。内核设置被命中。此外,我可能在一个控制器上有多个服务,并且不希望在其中包含5或6个参数。我宁愿做财产注入。我有点困惑。该链接不建议使用单例模式。此外,如果您对构造函数有很多依赖关系,那么这很可能不是构造函数的问题,而是您没有正确地遵循单一责任原则。此外,我成功地将其用作Ninjection的MVC引导程序。我通过添加一个以IUserService为参数的构造函数解决了这一问题,并且成功地实现了。我将遵循单一责任原则的方向。