2016-03-29 6 views
0

Ich habe ein Paket entwickelt, das zwei statische Datentypen (IClient und IClientHour) enthält. Einer der statischen Datentypen (IClientHour) hat eine Abhängigkeit vom anderen statischen Datentyp (IClient).Statische Datentypen mit Abhängigkeiten über Paket installieren

Ich versuche, die Datentypen zu meiner Instanz von Composite C1 über ein Paket hinzuzufügen. Ich möchte die Klassen DataTypePackageFragmentInstaller und DataTypePackageFragementUninstaller nutzen, um meine Datentypen mit dem Paket zu registrieren und zu löschen.

Das Problem, das ich mit Blick auf bin ist, dass das Paket zur Validierung fehlschlägt und spuckt den folgenden Fehler:

Failed to build data type descriptor for interface 'Builders.Data.IClientHour' The type 'Builders.Data.IClient' could not be found.

Beide Typen sind in einer DLL, die ich über die FilePackageFragmentInstaller zum CMS kopiere. Beim Durchsuchen des Composite C1-Forums habe ich einen Vorschlag gefunden, dem Dateielement für die Assembly, die die Typen enthält, assemblyLoad = "true" hinzuzufügen. Dieser Vorschlag hat das Problem, vor dem ich stehe, nicht gelöst.

Nachfolgend finden Sie eine verkürzte Version meiner install.xml die Abschnitte Anzeige an die Datentypen und Montage bezogen werden:

<mi:PackageFragmentInstallers> 
     <mi:Add installerType="Composite.Core.PackageSystem.PackageFragmentInstallers.FilePackageFragmentInstaller, Composite" uninstallerType="Composite.Core.PackageSystem.PackageFragmentInstallers.FilePackageFragmentUninstaller, Composite"> 
      <Files> 
       <File sourceFilename="~\Bin\Builders.dll" targetFilename="~\Bin\Builders.dll" allowOverwrite="false" assemblyLoad="true" /> 
      </Files> 
     </mi:Add> 

     <mi:Add installerType="Composite.Core.PackageSystem.PackageFragmentInstallers.DataTypePackageFragmentInstaller, Composite" uninstallerType="Composite.Core.PackageSystem.PackageFragmentInstallers.DataTypePackageFragmentUninstaller, Composite"> 
      <Types> 
       <Type name="Builders.Data.IClient, Builders" /> 
       <Type name="Builders.Data.IClientHour, Builders" /> 
      </Types> 
     </mi:Add> 
</mi:PackageFragmentInstallers> 

Jede Hilfe/Vorschläge mit dieser Aufgabe wird sehr geschätzt.

Antwort

1

Nachdem ich die gleiche Frage zu CodePlex gestellt hatte, waren Wysocki und burningice in der Lage, mich in die richtige Richtung zu führen, um das Problem zu beheben, mit dem ich konfrontiert war.

Kurz gesagt, ich hatte eine Zeichenfolge verwendet, um den Typ meines IClient-Datentyps aus dem IClientHour-Datentyp zu referenzieren. Wenn Sie eine Zeichenfolge verwenden, müssen Sie auch den Namen der Assembly in die Referenz aufnehmen (z. B. Builders.Data.IClient, Builders).

Gemäß Composite C1-Beispielen und der Anleitung von Burningice sollten Sie die Verwendung einer Zeichenfolge vermeiden und stattdessen Ihren Fremdschlüssel mit typeof referenzieren.

Hier ist ein Beispiel dafür, wie ich versuchte orginally meine Datentyp zu verweisen:

[ForeignKey("Builders.Data.IClient", AllowCascadeDeletes = true, NullReferenceValue = "{00000000-0000-0000-0000-000000000000}")]

Hier ist, wie ich sollte es eine Zeichenfolge mit verwiesen haben:

[ForeignKey("Builders.Data.IClient, Builders", AllowCascadeDeletes = true, NullReferenceValue = "{00000000-0000-0000-0000-000000000000}")]

Per Composite-C1 Beispiele und Anleitung von burningice Auf diese Weise sollten Sie einen anderen Datentyp referenzieren (Hinweis: Wenn Sie diese Methode verwenden, müssen Sie auch den Namen des Feldes angeben, das Sie in der Beziehung verwenden möchten):

[ForeignKey(typeof(Builders.Data.IClient), "Id", AllowCascadeDeletes = true, NullReferenceValue = "{00000000-0000-0000-0000-000000000000}")]

Referenzen:

CodePlex Forum Thema: http://compositec1.codeplex.com/discussions/652976

Composite-Dokumentation: http://docs.composite.net/Console/Static-IData-Types/Example2