В 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();