代码之家  ›  专栏  ›  技术社区  ›  Luke Duddridge

C ASP.NET(非MVC)的Ninject 2.0依赖项注入

  •  2
  • Luke Duddridge  · 技术社区  · 16 年前

    我已经找了一段时间了。

    我对依赖性注入并不陌生,并且已经使用了 StructureMap 有几个项目是MVC之类的,但我想给Ninject一个机会,以免错过乐趣。

    我想用 Ninject 我正在更新现有的Web应用程序。

    我在ninject提供的博客和wiki上找不到,我有点不耐烦说实话,所以可能错过了它,而且谷歌的前几页似乎已经过时了,或者正在谈论使用mvc和ninject。

    到目前为止,我已经有了以下功能,并且它可以工作,但是我希望有人能指出一个不那么具有侵入性的选项:将ServiceModule调用到内核,并从Web应用程序注入具有所需绑定的属性。

    到目前为止,我拥有的是一个服务模块:

    public class ServiceModule : NinjectModule
    {
        public override void Load()
        {
            string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
            Bind<IPreRegistrationService>().To<PreRegistrationService>()
                .WithConstructorArgument("connectionString",connectionString);
        }
    }
    

    然后在我的页面中,我定义了一个私有变量:

    private IPreRegistrationService xfemPreRegistrationService = null;
    

    然后在页面加载事件中:

        IKernel kernel = new StandardKernel(new ServiceModule());
        xfemPreRegistrationService = kernel.Get<IPreRegistrationService>();
    

    所以这是可行的,但我想进入一个我定义的阶段:

    [Inject]
    public IPreRegistrationService xfemPreRegistrationService { get; set; }
    

    在一页纸上,其余的都是魔法。

    干杯

    1 回复  |  直到 15 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    多亏了 this stackoverflow post 我知道分机的事了 Ninject.Web

    我发现的问题是你需要开始使用ninject.web,而我不能,因为我已经定义了一个页面库来处理证券等。

    所以,我唯一能看到的就是 KernelContainer class 来自项目(KernelContainer定义为内部):

    然后从Global ASAX OnApplications Start调用:

    KernelContainer.Kernel = new StandardKernel(new ServiceModule());
    
    // Request injections for the application itself.
    KernelContainer.Inject(this);
    

    然后在我的pagebase中,使用OnInit方法:

    KernelContainer.Inject(this);
    

    这使我能够达到我的目标,简单地说:

    [Inject]
    public IPreRegistrationService xfemPreRegistrationService { get; set; }
    

    需要的地方

    推荐文章