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

时间:2016-03-29 15:58:50

标签: c1-cms

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

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

我遇到的问题是软件包无法验证并吐出以下错误:

  

无法为接口构建数据类型描述符   'Builders.Data.IClientHour'类型'Builders.Data.IClient'不能   被发现。

这两种类型都在DLL中,我通过FilePackageFragmentInstaller复制到CMS。在搜索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>

非常感谢任何有关完成此任务的帮助/建议。

1 个答案:

答案 0 :(得分:1)

在对CodePlex提出同样的问题之后,wysocki和burningice能够引导我朝正确的方向纠正我所面临的问题。

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

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

以下是我尝试引用数据类型的示例:

  

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

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

  

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

每个Composite C1示例和来自burningice的指导这是您应该如何引用其他数据类型(注意:使用此方法时,您还必须包含您希望在关系中使用的字段的名称):

  

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

参考文献:

CodePlex论坛主题:http://compositec1.codeplex.com/discussions/652976

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