В CAB есть сервис своего модуля? - PullRequest
0 голосов
/ 10 августа 2009

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

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

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

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

Ответы [ 2 ]

1 голос
/ 18 декабря 2009

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

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

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

0 голосов
/ 26 августа 2010

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

Так что в оболочке у вас будет код, похожий на

частный ISqlService sqlService;

[ServiceDependency Required = false] публичный ISqlService SqlService { get {return sqlService; } set {sqlService = value; } }

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

_rootWorkItem.Services.AddNew ();

...