Использование свободного интерфейса Castle Windsor для регистрации компонентов в цепочке декораторов, когда существуют также специализированные сервисные типы? - PullRequest
2 голосов
/ 13 октября 2008

Я пытаюсь реализовать цепочку декораторов для доступа к данным на основе IRepository. У меня есть репозиторий, который делает данные доступ (на данный момент просто список в памяти) {1}, и у меня есть тот, который выполняет проверку {2}. Кроме того, у меня есть специализация моего Репозиторий IUsersRepository {3}, который определяет другой метод на Базовый интерфейс. Я работаю на последней версии багажника 5376.

Я хотел бы иметь возможность регистрировать свои компоненты, используя свободный Интерфейс - можно ли указать, как это происходит через XML, ключ сервис для использования в качестве innerRepo? Если так, то как? (См. Учебник по Bitter Coder Decorator для примера XML-конфигурации). Я бы предпочел не полагаться на порядок регистрации, кроме всего прочего.

Я подписан на этот пост .

Мне удалось заставить работать цепочку декоратора, если я спрошу контейнер для IRepository {4}; Я вижу свой Методы ValidatingRepository вызываются до моего доступа к данным. Но я не смог заставить его работать, если я попрошу контейнер для IUserRepository (я получаю InvalidCastException - я думаю, это ожидается, но можно ли это обойти?).

Я бы хотел избежать необходимости использовать один украшенный репо и один хранилище специализированных методов в моих сервисах; это мне кажется подверженные ошибки. На данный момент мои специализированные методы все связаны с выборка объектов по разным критериям - я полагаю, Получить метод взять по отдельному критерию - это позволило бы мне иметь только один на моем интерфейсе, и устранить необходимость в специализированных интерфейсы. За исключением того, что мне не разрешено, потому что мы не решили определенно использовать NHibernate. Возможно, если я сделал IRepo.Get взять делегат или IQueryable? Есть идеи? Я бился головой против этого все утро и не удивлюсь, если у меня есть туннель видение, и есть другой, лучший подход; любые предложения приветствуется!

{1} - {4} можно увидеть в утилите для копирования / вставки .

1 Ответ

3 голосов
/ 15 октября 2008

Кросс-пост здесь (с решением).

...