У меня есть проект ASP.NET MVC с 2 экземплярами интерфейса репозитория базы данных (IDBSessionFactory
): один для базы данных данных и один для базы данных config. В моем загрузчике, это как я разводка на DI:Autofac - Инъекция конкретного экземпляра интерфейса
// using ...
builder.Register(c => new DbSessionFactory("dataDB", Assembly.GetExecutingAssembly()))
.Named<IDbSessionFactory>("datadb")
.InstancePerHttpRequest()
.InstancePerApiRequest();
builder.Register(c => new DbSessionFactory("configDB", Assembly.GetExecutingAssembly()))
.Named<IDbSessionFactory>("configdb")
.InstancePerHttpRequest()
.InstancePerApiRequest();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
У меня есть некоторые классы контроллеров, которые нуждаются в "configDB"
экземпляре IDBSessionFactory
в качестве входного параметра. Как мне добиться этого?
Любая помощь приветствуется.
Уверены ли вы? Когда я делаю то, что вы предлагали, Autofac выдает исключение, потому что он не знает, какой экземпляр для инъекции, так как я зарегистрировал 2 именованных экземпляра в моем примере выше. –
@Shailen Sukul: Предположим, у вас есть контроллер с именем 'FooController', который регистрирует регистрацию регистраторов. Затем вы можете зарегистрировать 'FooController' вручную и ссылаться на компоненты« configDB »или« dataDB »через' ResolveNamed'. При разрешении 'FooController', Autofac предоставит вашу регистрационную информацию * вместо автоматической. Имеет ли это смысл? –
Я использовал ResolveNamed вместе с ResolvedParameter, чтобы заставить его работать .. комбинация сделала трюк для меня .. Моя точка была последней в выигрыше, часть не работала должным образом. Мне пришлось явно привязывать каждого контроллера к определенному экземпляру класса IDBSessionFactory .. благодарит за вашу помощь –