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

时间:2013-08-13 21:30:07

标签: asp.net-mvc dependency-injection inversion-of-control ninject

我是自动依赖注入的新手,并尝试使用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设置或其他配置文件?基本上为依赖注入注入依赖项:)

1 个答案:

答案 0 :(得分:5)

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

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

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

  1. 它会强制您进入干净的SOLID应用程序设计。
  2. 可以轻松地围绕某个概念的所有实现添加横切关注点(例如,围绕每个业务操作添加事务的装饰器)。
  3. 使batch register a whole range相关类型变得容易。
  4. 这使得在此基础上构建可维护的解决方案变得更加容易,例如maintenance free WCF services