.NET:COM包装器的命名空间/程序集设计

.NET:COM包装器的命名空间/程序集设计,.net,architecture,.net,Architecture,我有一个.NET项目,名称空间MyCompany.InformixConnector。我添加了一个COM包装器作为一个单独的项目/程序集,该项目/程序集将只部署到少数客户端。我正在努力学习如何组织项目/装配 我目前有两个程序集:MyCompany.InformixConnector和MyCompany.InformixConnector.Com .Com程序集引用了“核心”程序集。但是,让较低级别的程序集引用较高级别的程序集感觉是错误的 我考虑了两种选择: 重命名核心程序集,使它们处于同一级别:

我有一个.NET项目,名称空间
MyCompany.InformixConnector
。我添加了一个COM包装器作为一个单独的项目/程序集,该项目/程序集将只部署到少数客户端。我正在努力学习如何组织项目/装配

我目前有两个程序集:
MyCompany.InformixConnector
MyCompany.InformixConnector.Com

.Com
程序集引用了“核心”程序集。但是,让较低级别的程序集引用较高级别的程序集感觉是错误的

我考虑了两种选择:

  • 重命名核心程序集,使它们处于同一级别:
    MyCompany.InformixConnector.core
    MyCompany.InformixConnector.Com
  • 将COM项目放在不同的名称空间中,例如
    MyCompany.InformixConnectorForCom
  • 我认为最基本的问题是:COM包装器是否应该与其包装的代码位于同一名称空间中?

    说明嵌套名称空间依赖于更高级别的名称空间没有什么错:

    嵌套命名空间应该依赖于包含 命名空间。例如,System.Web.UI.Design中的类取决于 在System.Web.UI中的类上。但是,System.Web.UI中的类 不要依赖System.Web.UI.Design中的类

    同样的逻辑也可以应用于程序集命名。在您的特定情况下,我将把核心功能放在
    MyCompany.InformixConnector.core
    名称空间和程序集中,这将明确指出公共内容的位置

    然后为互操作性创建一个名称空间
    MyCompany.InformixConnector.Interop
    ,并将处理com和其他3d party内容所需的所有通用内容放在那里。如果没有这样的东西,你可以跳过它,根据需要添加它

    然后为com包装创建命名空间和程序集
    MyCompany.InformixConnector.Interop.com
    。此程序集将引用
    MyCompany.InformixConnector.Core
    MyCompany.InformixConnector.Interop
    (如果需要)。

    声明依赖更高级别名称空间的嵌套名称空间没有问题:

    嵌套命名空间应该依赖于包含 命名空间。例如,System.Web.UI.Design中的类取决于 在System.Web.UI中的类上。但是,System.Web.UI中的类 不要依赖System.Web.UI.Design中的类

    同样的逻辑也可以应用于程序集命名。在您的特定情况下,我将把核心功能放在
    MyCompany.InformixConnector.core
    名称空间和程序集中,这将明确指出公共内容的位置

    然后为互操作性创建一个名称空间
    MyCompany.InformixConnector.Interop
    ,并将处理com和其他3d party内容所需的所有通用内容放在那里。如果没有这样的东西,你可以跳过它,根据需要添加它


    然后为com包装创建命名空间和程序集
    MyCompany.InformixConnector.Interop.com
    。此程序集将引用
    MyCompany.InformixConnector.Core
    MyCompany.InformixConnector.Interop
    (如果需要)。

    我非常喜欢这样。谢谢,我非常喜欢。非常感谢。