Ninject依赖注入:从配置读取绑定?

Aes*_*its 2 asp.net-mvc dependency-injection ninject inversion-of-control

我是自动依赖注入的新手,并试图用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
    }    
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*ven 5

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

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

将这种类型的设计应用为一些明显的好处:

  1. 它迫使您进入干净的SOLID应用程序设计.
  2. 它可以轻松地在特定概念的所有实现周围添加横切关注点(例如,围绕每个业务操作添加事务的装饰器).
  3. 它可以轻松批量注册各种相关类型.
  4. 它使得在此基础上构建可维护的解决方案变得更加容易,例如免维护的WCF服务.