听起来您想提供IObjectContainer
toCustomerRepository
和的不同实现FooRepository
。如果是这样的话,属性可能是一把薄金属尺子。相反,我将向您展示如何使用 Autofac 实现多个实现。
.ContainerScoped()
(为简洁起见,省略了诸如此类的电话。)
首先,IObjectContainer
通过命名注册为每个连接字符串注册一个版本:
builder
.Register(c => new ObjectContainer(ConnectionStrings.CustomerDB))
.As<IObjectContainer>()
.Named("CustomerObjectContainer");
builder
.Register(c => new ObjectContainer(ConnectionStrings.FooDB))
.As<IObjectContainer>()
.Named("FooObjectContainer");
然后,解析存储库注册中的特定实例:
builder.Register(c => new CustomerRepository(
c.Resolve<IObjectContainer>("CustomerObjectContainer"));
builder.Register(c => new FooRepository(
c.Resolve<IObjectContainer>("FooObjectContainer"));
这使存储库没有配置信息:
class CustomerRepository
{
public CustomerRepository(IObjectContainer db) { ... }
}
class FooRepository
{
public FooRepository(IObjectContainer db) { ... }
}