2010-07-30 72 views
2

我一直在寻找一段时间。C#ASP.NET(不是MVC)的Ninject 2.0的依赖注入

我不是新来的依赖注入,并使用StructureMap与几个项目MVC之类的,但我觉得给Ninject一个去,以免错过的乐趣。

我正在尝试将Ninject与现有的网络应用程序一起使用,该应用程序正在进行更新。

我无法找到Ninject提供的博客和wiki,我有点不耐烦,说实话,可能错过了它,谷歌的前几页似乎过时或谈论使用MVC与Ninject。

到目前为止,我有以下几点,它的工作原理,但我希望有人可以指出一个不太干扰的选项,关于将ServiceModule调用到内核并从Web应用程序注入具有所需绑定的属性。

我至今是一个ServiceModule:

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; } 

在页面上,其余的是魔术。

干杯

回答

2

感谢this stackoverflow post我发现了关于延长Ninject.Web

的问题,我发现,你需要开始使用Ninject.Web,我不能,因为我已经定义来处理证券PageBase和这样的。

所以,我能看到的唯一途径是采取从项目中KernelContainer class(如KernelContainer被定义为内部):

然后从全球ASAX OnApplicationStart拨打:

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; } 

需要的地方