Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 结合ASP.NET MVC和服务层使用Ninject_C#_Asp.net Mvc_Ninject - Fatal编程技术网

C# 结合ASP.NET MVC和服务层使用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

我有一个ASP.NETMVC项目,它使用一个服务项目通过一组接口(项目)进入一个存储库项目

我有点困惑在哪里使用Ninject。在我看来,将Ninject包含在服务层是合乎逻辑的,因为这是我与接口交互的地方


我的问题是,这将如何实施?另外,其他人是如何实现这一点的?

在您的服务项目中,您需要创建一个从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,您需要扩展代码: