1

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

对于我们的数据层,我们有一大堆继承同一个通用类(EntityMapper)的数据访问类。虽然过去我们总是在需要时构建这些类的新实例,但它们实际上都可以更改为单例。我们已经重写了 ObjectDataSource 以使用 Ninject 实例化其数据访问对象,因此每当我们创建一个指向 EntityMapper 类之一的 ObjectDataSource 时,Ninject 将使用其默认的自绑定策略来注入必要的依赖项。由于这些类太多了,我们宁愿不必为每个 EntityMapper 类创建显式绑定,也不必为每个类都设置特殊属性。然而,我希望能够指示 Ninject 将 EntityMapper 的任何实例制作成单例类。像这样的东西:

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

有没有办法做到这一点?

4

1 回答 1

1

您可以使用约定扩展来执行以下操作

var kernel = new StandardKernel();
kernel.Scan( x=>
             {
                 x.FromAssemblyContaining<MyEntityMapper>();
                 x.FromCallingAssembly();
                 x.WhereTypeInheritsFrom<IEntityMapper>();
                 x.InSingletonScope();
             } );
于 2010-04-21T19:03:31.937 回答