是否可以指示Ninject将基于上下文的逻辑应用于所有绑定?

时间:2010-04-15 16:24:36

标签: ninject ninject-2

我们最近开始使用Dependency Injection,我们选择了Ninject 2(现在)作为我们的Io​​C容器。当我重构我们的解决方案以结合DI原则时,我遇到了一些让我烦恼的事情,我想知道是否有一种简单的方法来解决它。

对于我们的数据层,我们有一大堆继承相同泛型类(EntityMapper)的数据访问类。虽然过去我们总是在我们需要的时候构建这些类的新实例,但它们真的可以全部变成单身人士。我们已经重写ObjectDataSource以使用Ninject来实例化其数据访问对象,因此每当我们创建指向我们的EntityMapper类之一的ObjectDataSource时,Ninject将使用其默认的自绑定策略来注入必要的依赖项。由于这些类中有这么多,我们宁愿不必为每个EntityMapper类创建一个显式绑定,我们也不必为它们中的每一个都设置一个特殊的属性。但是,我希望能够指示Ninject将EntityMapper的任何实例转换为单例类。像这样:

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

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

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

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