Похоже, вы хотите предоставить различные реализации от IObjectContainer
до CustomerRepository
и 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) { ... }
}