C# Ninject内核工厂:好主意还是坏主意

C# Ninject内核工厂:好主意还是坏主意,c#,ninject,C#,Ninject,我有一个应用程序,目前分为服务层和数据访问层(MVC层正在开发中)。我正试图减少我的类中所需的样板Ninject代码的数量 我的第一个想法是为每个业务对象类型(即UserBase)创建一个基类,该类将由UserService和UserDAO扩展。不幸的是,这将阻止我扩展任何其他类(即,由所有服务实现扩展的抽象服务类、抽象DAO类等) 我的第二个想法是一个简单的工厂,返回传递给它的各种IModule实现的IKernel。不幸的是,每个类都需要一个IKernel成员变量,但它解决了这个问题,并允许创

我有一个应用程序,目前分为服务层和数据访问层(MVC层正在开发中)。我正试图减少我的类中所需的样板Ninject代码的数量

我的第一个想法是为每个业务对象类型(即UserBase)创建一个基类,该类将由UserService和UserDAO扩展。不幸的是,这将阻止我扩展任何其他类(即,由所有服务实现扩展的抽象服务类、抽象DAO类等)

我的第二个想法是一个简单的工厂,返回传递给它的各种IModule实现的IKernel。不幸的是,每个类都需要一个IKernel成员变量,但它解决了这个问题,并允许创建AbstractService和AbstractDAO

    class NinjectKernelFactory
    {
        private NinjectKernelFactory()
        {
        }

        public static IKernel getKernel(params IModule[] modules)
        {
            IKernel kernel = new StandardKernel(modules);
            return kernel;
        }
    }

对于优化我对Ninject的使用,还有其他想法吗

是的,使用属性注入是一种很好的方法。如果你想得到更好的设计,你甚至可以使用ninject本身来创建控制器,方法是创建一个定制的ControllerFactory并使用内核来获得实例控制器。这样,控制器将已经用IKernel属性初始化:


我有点担心这里的新环境。这意味着每次调用getKernel时,都会创建一个新内核。应该是这样的吗?