Abhängigkeitsinjektion in MS Dynamics CRM

8

Ich beginne gerade mit der Erweiterung von Microsoft Dynamics CRM mit Plugins.

Ist es möglich, diesen Plugins Dependency-Injection hinzuzufügen (für Tests, lose Kopplung usw.)? Wo kann ich meinen IoC-Container registrieren, so dass er über alle Plugins desselben Typs verwendet wird?

    
Jente Rosseel 15.01.2014, 14:55
quelle

2 Antworten

5

Wir haben versucht, den Unit-Test zu testen und die Abhängigkeitsinjektion auf unsere Dynamics CRM-Anwendung anzuwenden. Da Microsoft-Support und -Berater bestätigt sind, gibt es leider keinen unterstützten Weg. Sie können entweder Ihre gesamte Plugin-Geschäftslogik in eine andere Business-Klasse übertragen und die Abhängigkeitsinjektion anwenden oder aufhören, darüber nachzudenken.

Wenn Sie sich dafür entscheiden, mit Dynamics CRM zu kämpfen, müssen Sie ein statisches Feld für eine Superklasse des Plugins definieren, die Ihr DI-Container sein wird. Wie folgt,

%Vor%

Ich kann wirklich nicht verstehen, warum Microsoft nicht einfach einige Komponenten für die IServiceProvider-Implementierung registriert, die sie intern verwenden.

Ps. Da Ihre SuperPlugin-Klasse ein IP-Plugin ist, vergessen Sie möglicherweise, die Schnittstellenimplementierung für die Subklasse zu schreiben. Wir haben jedoch einige Fehler im Plugin-Registrierungstool festgestellt, das mit dem offiziellen Dynamics CRM SDK ausgeliefert wird. Falls Sie das gleiche Problem haben, sollten Sie Ihre Plugins auch wie folgt implementieren:

%Vor%

Bearbeiten: Siehe ein kleines Beispiel, das das Konzept Ссылка

erläutert     
Mert Susur 28.04.2014, 11:13
quelle
5

Plugins in CRM sind der Bane of Unit Testing:

  • Probleme mit Nicht-Plugin-Test
    • Keine Möglichkeit,
    • vorübergehend zu deaktivieren
    • Einfach zu vergessen, dass es läuft
  • Probleme beim Testen von Plugins selbst
    • Test kann nicht verbunden und an Prozess
    • angehängt werden
    • Viel zu mock out, Pipeline, Dienstleister usw.
    • Führt multi-threaded
    • aus

Dies hat mich zu der folgenden Lösung zum Testen von Plugins geführt:

  • Löschen Sie den Plugin-Kontext so schnell wie möglich und extrahieren Sie sofort alle benötigten Objekte und Dienste.
  • Erstellen Sie eine ExecutePlugin -Methode, um Unit-Tests anzuhängen, und rufen Sie diese Methode sofort auf, nachdem Sie die Objekte aus dem Plugin-Kontext extrahiert haben.
  • Schieben Sie so viel Code wie möglich in die Business-Schicht.

Dies führt zu Plugins, die so aussehen (mit einer starken Verwendung von Erweiterungsmethoden, um dies zu vereinfachen):

%Vor%

Sobald dies erledigt ist, ist das einzige, was Sie benötigen, um die ExceutePlugin Unit-Unit zu testen, Ihre eigene IOrganizationService , die die erforderlichen Aufrufe ausspioniert und Sie Ihre Unit-Tests durchgeführt haben. Ich kümmere mich nicht einmal Unit-Tests der Execute -Methode. Entweder wird es funktionieren, oder es wird nicht und blasen Chow bei der ersten Verwendung aus CRM heraus.

    
Daryl 15.01.2014 16:13
quelle