C# 结合ASP.NET MVC和服务层使用Ninject
我有一个ASP.NETMVC项目,它使用一个服务项目通过一组接口(项目)进入一个存储库项目 我有点困惑在哪里使用Ninject。在我看来,将Ninject包含在服务层是合乎逻辑的,因为这是我与接口交互的地方C# 结合ASP.NET MVC和服务层使用Ninject,c#,asp.net-mvc,ninject,C#,Asp.net Mvc,Ninject,我有一个ASP.NETMVC项目,它使用一个服务项目通过一组接口(项目)进入一个存储库项目 我有点困惑在哪里使用Ninject。在我看来,将Ninject包含在服务层是合乎逻辑的,因为这是我与接口交互的地方 我的问题是,这将如何实施?另外,其他人是如何实现这一点的?在您的服务项目中,您需要创建一个从NinjectModule派生的类,并重写Load方法;此类的职责是向Ninject注册依赖项 public class ServiceModule : NinjectModule { pub
我的问题是,这将如何实施?另外,其他人是如何实现这一点的?在您的服务项目中,您需要创建一个从NinjectModule派生的类,并重写Load方法;此类的职责是向Ninject注册依赖项
public class ServiceModule : NinjectModule
{
public override void Load() {
Bind<IAccountService>().To<AccountService>();
}
}
在您的服务项目中,您需要创建一个从NinjectModule派生的类,并重写Load方法;此类的职责是向Ninject注册依赖项
public class ServiceModule : NinjectModule
{
public override void Load() {
Bind<IAccountService>().To<AccountService>();
}
}
理论上,唯一可以使用DI容器的地方是在项目的设置中。对于ASP.NET MVC项目,这将在Global.asax的应用程序启动方法中。对于我的项目,我使用基于NInject的ControllerFactory根据需要实例化控制器,然后控制器在其构造函数中具有所需的任何依赖项,因此NInject将它们适当地连接起来 my global.asax:
private static IKernel kernel = new StandardKernel();
protected void Application_Start()
{
kernel.Bind<IRepository<User>>().To<NHibernateRepository<User>>();
ControllerBuilder.Current.SetControllerFactory( new NinjectControllerFactory( kernel ) );
}
理论上,唯一可以使用DI容器的地方是在项目的设置中。对于ASP.NET MVC项目,这将在Global.asax的应用程序启动方法中。对于我的项目,我使用基于NInject的ControllerFactory根据需要实例化控制器,然后控制器在其构造函数中具有所需的任何依赖项,因此NInject将它们适当地连接起来 my global.asax:
private static IKernel kernel = new StandardKernel();
protected void Application_Start()
{
kernel.Bind<IRepository<User>>().To<NHibernateRepository<User>>();
ControllerBuilder.Current.SetControllerFactory( new NinjectControllerFactory( kernel ) );
}
注意,要使用NinjectHttpApplication,您需要扩展代码:注意,要使用NinjectHttpApplication,您需要扩展代码: