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

我的第一个想法是由UserService和UserDAO扩展的每种业务对象类型(即UserBase)的基类。不幸的是,这将阻止我扩展任何其他类(即由所有Service实现扩展的AbstractService类,AbstractDAO类等)。

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

    class NinjectKernelFactory
    {
        private NinjectKernelFactory()
        {
        }

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


还有其他想法可以优化我对Ninject的使用吗?

最佳答案

是的,使用属性注入是此处的好方法。而且,如果您想获得更好的设计,则可以通过创建自定义ControllerFactory并使用内核获取实例控制器,甚至使用ninject自身来创建控制器。这样,控制器将已经使用IKernel属性进行了初始化:

http://nayyeri.net/custom-controller-factory-in-asp-net-mvc

10-07 23:22