代码之家  ›  专栏  ›  技术社区  ›  John Sheehan

在ASP.NET MVC应用程序中使用Ninject 2时的注入问题

  •  1
  • John Sheehan  · 技术社区  · 15 年前

    我正在将Ninject2与ASP.NET MVC Web应用程序结合使用。所有依赖项都在堆栈中正确处理(控制器->服务->存储库)。但是,我在服务项目中有一些类,它们不在应用程序启动时我还想注入的“链”中。我怎样才能让Ninject认出他们?我有公共财产 [Inject] 属性,但当应用程序运行时,它们为空。我错过了什么?

    这是我的MVC应用程序类:

    public class MvcApplication : NinjectHttpApplication
    {
        protected override void OnApplicationStarted() {
            RegisterRoutes(RouteTable.Routes);
            RegisterAllControllersIn(Assembly.GetExecutingAssembly());
        }
    
        protected override IKernel CreateKernel() {
            var modules = new INinjectModule[] {
                new Services.ServiceModule(),
                new Data.DataModule()
            };
    
            var kernel = new StandardKernel(modules);
    
            return kernel;
        }
    
        // route registration removed
    }
    

    我仔细检查了两个模块,以确保存在正确的绑定。

    模块样本:

    public class ServiceModule : NinjectModule
    {
        public override void Load() {
            Bind<IAccountService>().To<AccountService>();
            ....
        }
    }
    
    2 回复  |  直到 15 年前
        1
  •  2
  •   Nate Kohari    15 年前

    为了让ninject注入依赖项,必须使用内核创建对象。对于自然依赖链中的对象(例如,在应用程序中,控制器->服务->存储库)来说,这很容易,但对于外部的对象来说,这很难做到。

    您必须添加其他类型作为在自然链中创建的某个类型的依赖项,或者通过某种方式在内核上挂接并调用get<t>。为此,您可能需要使用静态服务定位器。

        2
  •  0
  •   J.R. Garcia    15 年前

    是否覆盖createKernel()?你需要这样做,然后在那里装订。