【发布时间】:2012-06-22 09:58:17
【问题描述】:
我正在编写一个应用程序来承载一系列插件。这些插件一般使用两个库.Common和.UI,其中包含插件需要实现的接口等。
我现在正在为插件添加受许可限制的功能。我已经修改了我的主机应用程序,使其只加载定义接口实例 (ILicenseInfoProvider) 的插件并通过 MEF 导出它。那一点没问题。
我们有一个选定的许可代码提供商,他们的许可系统涉及到库的使用。现在,我不想强制每个插件都通过该系统获得许可,并且通过扩展,要求引用该系统的程序集。所以,我打算将引用第三方库的代码放在它自己的程序集中(类似于.Licensing.Vendor)。这样,插件可以简单地添加对该程序集的引用,并包含一个看起来有点像这样的类:
[Export(typeof(ILicenseInfoProvider))]
class MyAssemblyLicenseInfoProvider : BaseVendorLicenseInfoProvider
{
public MyAssemblyLicenseInfoProvider() : base("My Assembly's Product Name")
}
我对这种设置相当满意,除了一件琐碎的事情——.Licensing.Vendor 程序集将只包含一个类,即与正在使用的特定许可系统相关的BaseVendorLicenseInfoProvider。
所以,毕竟,我的问题很简单:
把这个类放在它自己的程序集中是不是有点矫枉过正,还是不强制所有插件保存对第三方库的引用的好处值得这样做?
【问题讨论】:
-
如果这意味着架构和代码对您和您的团队有意义,那很好。除此之外,你把它放在另一个组件中是有意义的,如果你最终需要更多的东西,它会开始变得更少......
标签: c# .net-assembly organization