4

我正在编写一个应用程序来承载一系列插件。这些插件通常使用两个库.Common.UI其中包含插件需要实现的接口等。

我现在正在添加插件受许可的功能。我已经修改了我的主机应用程序,使其只加载定义接口实例 () 的插件ILicenseInfoProvider并通过 MEF 导出它。那一点没问题。

我们有一个选定的许可代码提供商,他们的许可系统涉及到库的使用。现在,我不想​​制每个插件都通过该系统获得许可,并且通过扩展,需要引用该系统的程序集。所以,我打算将引用第三方库的代码放在它自己的程序集中(类似于.Licensing.Vendor)。这样,插件可以简单地添加对该程序集的引用,并包含一个看起来有点像这样的类:

[Export(typeof(ILicenseInfoProvider))]
class MyAssemblyLicenseInfoProvider : BaseVendorLicenseInfoProvider
{ 
    public MyAssemblyLicenseInfoProvider() : base("My Assembly's Product Name")
}

我对这种设置相当满意,除了一件琐碎的事情 -.Licensing.Vendor程序集将只包含一个类,它BaseVendorLicenseInfoProvider与正在使用的特定许可系统有关。

所以,毕竟,我的问题很简单:

将该类放在它自己的程序集中似乎有点矫枉过正,还是不强制所有插件保存对第三方库的引用的好处是值得的?

4

3 回答 3

3

目前,该程序集有一个合适的目的 - 一个公开可见的程序集,供第三方提供通过许可进行交互的手段。对我来说似乎完全合理:

  • 即使目前只有一个类,未来可能还会有更多
  • 它是公开可见的,因此您只想提供必要的内容
  • 它封装了合理级别的责任,即许可,而不强制执行特定的实现
于 2012-06-22T10:04:39.033 回答
2

我投反对票,这不是矫枉过正,有些插件可能不需要许可证,有些可能需要..

于 2012-06-22T10:00:23.553 回答
1

It depends on what you are trying to achieve. Assemblies are a way of physically separating code whereas namespaces are a way of logically separating code.

Given that there can be a slight performance hit of loading too many assemblies (by which I mean a significant number, not just a few) then I suppose you could consider if it is possible to group as much as you can into one assembly but separate them by namespaces. But if you feel that it really does make sense to keep BaseVendorLicenseInfoProvider completely separate from everything else then I also do not see that as an issue.

At the end of the day it is all about what you feel is right, everyone has their own opinion of course but as long as what you have works for you then I don't see a problem.

于 2012-06-22T10:06:09.083 回答