Предположим, что у меня есть следующие иерархии, я хотел бы создать экземпляр с DI:Определение отдельной инъекции для определенного интерфейса
DatabaseService(IDatabaseRepository) : IDatabaseService
Database1Service(IDatabaseRepository) : IDatabase1Service
Database2Service(IDatabaseRepository) : IDatabase2Service
DatabaseRepository(IUnitOfWork) : IDatabaseRepository
DatabaseRepository2(IUnitOfWork) : IDatabaseRepository
UnitOfWork(string) : IUnitOfWork
Есть ли способ в Stucturemap, что позволит мне это сделать?
public class MyRegistry : Registry
{
public MyRegistry()
{
//default-convention-scan code here
//this is the unit of work for almost all of my interface implementations
//i.e. new DatabaseService(new DatabaseRepository(new IUnitOfWork("Database1")))
// new Database1Service(new DatabaseRepository(new IUnitOfWork("Database1")))
For<IUnitOfWork>()
.Use(new UnitOfWork("Database1"));
//Database2Service needs a separate implementation Of UnitOfWork
//i.e. new Database2Service(new DatabaseRepository(new IUnitOfWork("Database2")))
For<IUnitOfWork>().IfDescendantDependencyOf<IDatabase2Service>()
.Use(new UnitOfWork("Database2"))
}
}
Если это не ясно, я хочу, чтобы все впрыскивается IUnitOfWork
с, чтобы указать на одноэлементных new UnitOfWork("Database1")
, за исключением, если он был введен при попытке построить экземпляр IDatabase2Service
, где он должен использовать синглтон new UnitOfWork("Database2")
.
Do обе базы данных разделяют ту же самую схему базы данных? – Steven
Скажем, «да». – Arithmomaniac
В этом случае вы нарушаете Принцип замещения Лискова. Вы должны создать другой интерфейс для второй базы данных. – Steven