代码之家  ›  专栏  ›  技术社区  ›  StriplingWarrior

可以指示ninject对所有绑定应用基于上下文的逻辑吗?

  •  1
  • StriplingWarrior  · 技术社区  · 16 年前

    我们最近开始使用依赖注入,我们选择了ninject 2(目前)作为ioc容器。当我重构我们的解决方案以合并di原则时,我遇到了一些让我有点困扰的事情,我想知道是否有一种简单的方法可以绕过它。

    对于我们的数据层,我们有一大堆继承相同泛型类(EntityMapper)的数据访问类。在过去,我们总是在需要时构造这些类的一个新实例,但实际上它们都可以转换为单例。我们重写了objectdatasource以使用ninject实例化其数据访问对象,因此,每当我们创建指向entitymapper类之一的objectdatasource时,ninject将使用其默认的自绑定策略注入必要的依赖项。由于这些类太多了,我们不必为每个entityMapper类创建显式绑定,也不必为每个类都设置特殊属性。不过,我希望能够指示ninject将entitymapper的任何实例生成一个单例类。像这样的:

    Bind(t => typeof(IEntityMapper).IsAssignableFrom(t)).InSingletonScope();
    

    有办法吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Ian Davis    16 年前

    你可以使用 conventions extension 执行以下操作

    var kernel = new StandardKernel();
    kernel.Scan( x=>
                 {
                     x.FromAssemblyContaining<MyEntityMapper>();
                     x.FromCallingAssembly();
                     x.WhereTypeInheritsFrom<IEntityMapper>();
                     x.InSingletonScope();
                 } );
    
    推荐文章