interface IUserService
class LocalUserService : IUserService
class RemoteUserService : IUserService
interface IUserRepository
class UserRepository : IUserRepository
Если у меня есть следующие интерфейсы и классы, где классы IUserService
зависят от IUserRepository
. Я могу зарегистрировать эти компоненты, выполнив что-то вроде:
container.AddComponent("LocalUserService", typeof(IUserService), typeof(LocalUserService));
container.AddComponent("RemoteUserService", typeof(IUserService), typeof(RemoteUserService));
container.AddComponent("UserRepository", typeof(IUserRepository), typeof(UserRepository));
... и получите услугу, которую я хочу, позвонив по телефону:
IUserService userService = container.Resolve<IUserService>("RemoteUserService");
Однако, если у меня есть следующие интерфейсы и классы:
interface IUserService
class UserService : IUserService
interface IUserRepository
class WebUserRepository : IUserRepository
class LocalUserRepository : IUserRepository
class DBUserRepository : IUserRepository
Как мне зарегистрировать эти компоненты, чтобы компонент IUserService
мог "выбрать", какой репозиторий добавить во время выполнения? Моя идея состоит в том, чтобы позволить пользователю выбрать, из какого репозитория запрашивать, предоставив 3 переключателя (или что-то еще) и попросить контейнер разрешить новый IUserService
каждый раз.