2

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

我的第一个想法是为每个业务对象类型(即 UserBase)创建一个基类,由 UserService 和 UserDAO 扩展。不幸的是,这将阻止我扩展任何其他类(即,由所有服务实现扩展的 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 的使用吗?

4

1 回答 1

1

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

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

于 2009-12-23T20:17:07.277 回答