.NET 是否具有注册相关对象的规范机制?(即 .NET 的组件类别?)
背景
如果您有一堆 COM 对象,它们都是相关的,并且都实现了相同的接口,并且想要一个中心位置来注册所有这些对象,那么您可以使用Component Categories。
HKCR\Component Categories
是可以注册一堆相关COM对象的地方。如果我的软件支持插件,我会创建一个“类别”,例如:
HKCR\Component Categories\{1628B80E-E735-481C-8EDA-FC13D92B5F36}
409: REG_SZ = "Ian's super-cool application plugins"
然后任何想要在我的应用程序中注册他们的插件的人都只需要提到他们通过创建一个名为Implemented Categories的条目来实现该类别:
HKCR\{EC05174F-F824-4888-9FDC-EE33080917DE}
\ProgID
default = "Stackoverflow.IansSuperCoolApp.1"
\Implemented Categories
\{1628B80E-E735-481C-8EDA-FC13D92B5F36}
现在我知道在哪里可以找到它们。例如,微软有几十个图像转换过滤器,它们都注册在 category 下{C501EDBE-9E70-11D1-9053-00C04FD9189D}
:
- DXImageTransform.Microsoft.CrBlinds.1
- DXImageTransform.Microsoft.Iris.1
- DXImageTransform.Microsoft.AlphaImageLoader.1
- DXImageTransform.Microsoft.RadialWipe.1
- ...
还有 shell 扩展、SQL Server 冲突解决器;任何时候你需要一种方法来找到你想要的所有课程。
只有一种实现
现在,除了它是注册相关 COM 对象的规范位置之外,没有什么特别之处。Component Categories
每个人都可以自由创建自己的课程注册方式。但是发明 COM 的人决定创建“这个”地方来做它。微软甚至提供了一个 API 来帮助使用它。
但是没有什么能阻止我声明自己的机制来注册包含我想要的功能的类:
- 我可以创建自己的
HKCR\Ian's Supercool Application plugins
- 我可以有一个声明 ProgIDs 的 XML 文件
如果您要在组中注册 COM 对象,为什么不使用专为您的任务设计的地方。
但是.NET 呢?
如果我有几十个 .NET 程序集 (*.dll) 会发生什么;我应该怎么做才能注册这些?我不能真正使用 COM 组件类别,因为它们不是 COM 对象(即它们不是 COM 对象或 COM 可调用包装器);它们是托管程序集。
.NET 中是否有规范的机制来注册程序集类别?
注意:您可以在第一行之后停止阅读所有内容;其余的只是绒毛。