Замок Виндзор регистрация - PullRequest
2 голосов
/ 14 мая 2010
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 каждый раз.

1 Ответ

4 голосов
/ 14 мая 2010

Если вы хотите решить, какой компонент для инъекции (push) вы используете IHandlerSelector s.

Если вы хотите решить, какой компонент вытащить, используйте TypedFactoryFacility.

и как sidenote.

Не используйте AddComponent, используйте container.Register(Component.For...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...