2

我是自动依赖注入的新手,并试图用 MVC4 应用程序干净地实现 Ninject。一切都正常,但我的强迫症想知道应用程序将如何在 NinjectWebCommon.cs 中的 RegisterServices(IKernel 内核)方法中列出绑定方面进行扩展。例如,

    /// <summary>
    /// Load your modules or register your services here!
    /// </summary>
    /// <param name="kernel">The kernel.</param>
    private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<IAbstractManagerA>().To<ConcreteManagerA>();
        kernel.Bind<IAbstractManagerB>().To<ConcreteManagerB>();
        kernel.Bind<IAbstractRepoA>().To<ConcreteRepoA>();
        ...etc etc could be hundreds
    }    

有没有更好的方法来处理这个?也许将每个配对作为 web.config 设置或其他配置文件?本质上为依赖注入注入依赖:)

4

1 回答 1

5

考虑围绕一些定义明确的通用抽象来设计您的应用程序,例如:

  • IRepository<TEntity>隐藏数据库 CRUD 操作
  • ICommandHandler<TCommand>定义您的系统业务运营/用例(示例)。
  • IQueryHandler<TQuery, TResult>定义可由业务逻辑使用的自定义查询(示例)。
  • IValidator<T>作为可以验证实体或命令的类的抽象(示例)。

应用这种类型的设计有几个明显的好处:

  1. 它迫使您进入一个干净和可靠的应用程序设计。
  2. 它可以很容易地围绕某个概念的所有实现添加横切关注点(例如,围绕每个业务操作添加事务的装饰器)。
  3. 它使批量注册一系列相关类型变得容易。
  4. 它使得在此之上构建可维护的解决方案变得更加容易,例如免维护的 WCF 服务
于 2013-08-14T07:07:08.523 回答