通过包安装具有依赖关系的静态数据类型

Installing Static Data Types with Dependencies via Package

我开发了一个包,其中包含两种静态数据类型(IClient 和 IClientHour)。其中一种静态数据类型 (IClientHour) 依赖于另一种静态数据类型 (IClient)。

我正在尝试通过包将数据类型添加到我的 Composite C1 实例。我想利用 DataTypePackageFragmentInstaller 和 DataTypePackageFragementUninstaller 类 在包中注册和删除我的数据类型。

我面临的问题是程序包无法验证并出现以下错误:

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

这两种类型都在我通过 FilePackageFragmentInstaller 复制到 CMS 的 DLL 中。在搜索 Composite C1 论坛时,我发现了将 assemblyLoad="true" 添加到包含类型的程序集的 File 元素的建议。这个建议没有解决我面临的问题。

下面是我的 install.xml 的精简版,显示了与数据类型和程序集相关的部分:

<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>

非常感谢任何 assistance/suggestions 完成此任务。

在 CodePlex 上问了同样的问题后,wysocki 和 burningice 能够引导我朝着正确的方向纠正我面临的问题。

简而言之,我使用字符串从 IClientHour 数据类型引用我的 IClient 数据类型的类型。如果您使用字符串,则还必须在引用中包含程序集名称(例如 Builders.Data.IClient、Builders)。

根据 Composite C1 示例和 burningice 的指导,您应该避免使用字符串,而是使用 typeof 引用您的外键。

这是我最初尝试引用我的数据类型的示例:

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

这是我应该如何使用字符串引用它:

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

根据 burningice 的 Composite C1 示例和指南,这是您应该如何引用另一种数据类型(注意:使用此方法时,您还必须包括您希望在关系中使用的字段的名称):

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

参考文献:

CodePlex 论坛帖子:http://compositec1.codeplex.com/discussions/652976

综合文档:http://docs.composite.net/Console/Static-IData-Types/Example2