В CAB есть сервис своего модуля?

Я изучаю Композитный блок приложений, и я в восторге от услуг. У меня есть приложение оболочки в собственном решении и, конечно, тестовый модуль в собственном решении (разработан и тестируется полностью независимо от решения оболочки). Если бы я создал службу с именем "Sql Service", мне нужно было бы поместить ее в свою собственную библиотеку, чтобы и оболочка, и модуль знали типы?

Если это так, то для хорошей практики я должен поместить сервисный проект в решение оболочки или внешний как модуль (в своем собственном решении), даже если он не загружен как модуль?

Тогда как насчет ссылок? Должна ли оболочка ссылаться на это напрямую, добавить, а затем добавить службу? Или загрузить его как модуль и добавить сервис?

Где я должен создать свои услуги? Должен ли я ссылаться или загружать как модули?

2 ответа

Решение

Если у вас есть служба, которую вы хотите предоставить двум разным сборкам, то вам следует определить интерфейс этой службы в отдельной сборке и поделиться им между ними. Вообще говоря, я всегда помещаю сервисы в их собственную сборку (проект) и помещаю определения интерфейса для этих сервисов в отдельную сборку (проект).

В конкретном случае CAB я бы избегал предоставления большей части чего-либо Shell, если только это не является абсолютно необходимым - только если бы сама Shell использовала сервис, я бы ссылался на него в Shell. Раковина должна быть голой; он существует для того, чтобы модули могли показывать свои элементы пользователю. Отдельные модули могут беспокоиться о ссылках и использовании определенных сервисов.

Что касается организации решения. Обычно, когда я работаю над CAB-приложением, все в одном решении. Мне редко приходилось нуждаться в отдельных решениях. Отдельные проекты, да - но все под одним общим решением.

В дополнение к ответу Криса, единственный способ, которым ваша оболочка узнает о вашем сервисе, - это если у вас есть сервисная зависимость в оболочке вашего сервиса, и вы добавили сервис в свой корневой рабочий элемент.

Так что в оболочке у вас есть код что-то вроде

частный ISqlService sqlService;

[ServiceDependency Required = false] public ISqlService SqlService {get {return sqlService; } set {sqlService = value; }}

В классе SqlService (который должен быть унаследован от класса WorkItemController) у вас будет что-то вроде

_rootWorkItem.Services.AddNew();

Другие вопросы по тегам