Dynamics CRM 2011. Должен ли каждый подключаемый модуль, относящийся к другому объекту, иметь собственную сборку?

Я создаю серию связанных плагинов. Каждый плагин предназначен для разных объектов. Должен ли каждый плагин иметь свою сборку? Я использую Visual Studio и создал второй проект в том же решении, но не вижу нового шага в инструменте регистрации.

Спасибо


person Gary    schedule 18.03.2013    source источник


Ответы (4)


Можно, но не нужно. Это в значительной степени ваше дизайнерское решение. Подумайте, есть ли у вас несколько классов, реализующих IPlugin

public class MyFirstPlugin : IPlugin
{
    //implemented as per usual
}

public class MySecondPlugin : IPlugin
{
    //implemented as per usual
}

Если бы вы зарегистрировали эту DLL в инструменте регистрации плагинов, вы бы увидели следующую структуру:

- Server
    - DLL
        - MyFirdtPlugin
        - MySecondPlugin

Затем вы можете добавить шаги к каждому плагину по желанию.

Альтернативой было бы иметь один плагин для каждой DLL, что дало бы вам

- Server
    - DLL1
        - MyFirstPlugin
    - DLL2
        - MySecondPlugin

Я должен признать, что это кажется излишним, но это также может зависеть от того, как вы используете свои решения.

person glosrob    schedule 18.03.2013
comment
Спасибо. Мне пришлось отменить регистрацию и заново зарегистрировать dll, чтобы появился новый плагин. - person Gary; 18.03.2013
comment
Ооо, тот, который всегда меня достает (даже спустя годы, когда я этим занимаюсь). Когда вы загружаете DLL, убедитесь, что вы установили флажок, чтобы включить все плагины в DLL. Если раньше у вас был только один, будет включен только он. - person glosrob; 19.03.2013

В дополнение к ответу glosrob, я предполагаю, что вы используете инструмент регистрации плагинов для регистрации своего плагина. Если это так, вам нужно убедиться, что после добавления нового плагина в ту же dll вы обновите саму dll плагина с помощью инструмента регистрации, чтобы вы могли зарегистрировать новый метод плагина, который вы создали.

person Daryl    schedule 18.03.2013

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

Обратите внимание, что после выбора сборки в диалоговом окне «Файл» вам нужно нажать кнопку «Загрузить сборку», чтобы загрузить все классы, реализующие интерфейс IPlugin.

person Anwar    schedule 18.03.2013
comment
Не могли бы вы уточнить, почему это не является хорошей практикой? Не означает ли это, что если вы что-то испортите в одном плагине, все остальные перестанут работать? В настоящее время я пытаюсь решить, идти ли по пути отдельного проекта или все мои плагины находятся в одной библиотеке классов? - person Ant; 11.07.2013

Чтобы ответить на вопрос - нет, каждый новый плагин не обязательно должен содержаться в новой сборке.

Чтобы уточнить - технически возможно разместить весь код плагина только в одном проекте и в одном файле.

Предупреждаю: вышеизложенное было бы кошмаром, чтобы справиться со всеми «если» и «но», так что это хороший пример «можно, но не следует».

Чтобы предложить - у меня обычно есть отдельный проект для плагина каждой сущности и я обрабатываю все сообщения с помощью переключателя. Иногда у меня может быть две или три сборки, но вы узнаете, когда придет время, когда доберетесь туда. Обычно достаточно одной DLL.

person Konrad Viltersten    schedule 19.03.2013