我们最近开始使用Dependency Injection,我们选择了Ninject 2(现在)作为我们的IoC容器。当我重构我们的解决方案以结合DI原则时,我遇到了一些让我烦恼的事情,我想知道是否有一种简单的方法来解决它。
对于我们的数据层,我们有一大堆继承相同泛型类(EntityMapper)的数据访问类。虽然过去我们总是在我们需要的时候构建这些类的新实例,但它们真的可以全部变成单身人士。我们已经重写ObjectDataSource以使用Ninject来实例化其数据访问对象,因此每当我们创建指向我们的EntityMapper类之一的ObjectDataSource时,Ninject将使用其默认的自绑定策略来注入必要的依赖项。由于这些类中有这么多,我们宁愿不必为每个EntityMapper类创建一个显式绑定,我们也不必为它们中的每一个都设置一个特殊的属性。但是,我希望能够指示Ninject将EntityMapper的任何实例转换为单例类。像这样:
Bind(t => typeof(IEntityMapper).IsAssignableFrom(t)).InSingletonScope();
有没有办法做到这一点?
答案 0 :(得分:1)
您可以使用conventions extension执行以下操作
var kernel = new StandardKernel();
kernel.Scan( x=>
{
x.FromAssemblyContaining<MyEntityMapper>();
x.FromCallingAssembly();
x.WhereTypeInheritsFrom<IEntityMapper>();
x.InSingletonScope();
} );