加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 装饰.NET程序集

发布时间:2020-12-16 01:56:29 所属栏目:百科 来源:网络整理
导读:这可能是一个长镜头,但.NET的灵活性永远不会让我惊讶,所以这里. 我正在开发一个MVC应用程序,需要在一组程序集中搜索从公共基类派生的类类型. 即我有几个具有活动类型的程序集,这些活动类型都派生自ActivityBase.这些程序集将放在特定目录中.它们有点像插件.
这可能是一个长镜头,但.NET的灵活性永远不会让我惊讶,所以这里.

我正在开发一个MVC应用程序,需要在一组程序集中搜索从公共基类派生的类类型.

即我有几个具有活动类型的程序集,这些活动类型都派生自ActivityBase.这些程序集将放在特定目录中.它们有点像插件.由于它们需要在运行时动态加载,因此它们还需要伴随一些依赖项(除非我能找到一种方便的方法来分隔它们,所以也可以自由地加入它们.)

我有代码将遍历此目录中的所有.DLL文件,加载程序集,并遍历程序集中的所有类型以查找派生自ActivityBase的类型.

这很好用.但是,我想避免加载和搜索没有活动的程序集,因为某些依赖项有数千种类型,这就成了性能问题.

所以我想我的问题是,除了文件命名约定之外,是否有任何方法可以“装饰”或使用某种类型的数据标记程序集,这些数据表明它是一个活动程序集,可以在构建时轻松实现自动化在运行时轻松阅读?

还欢迎任何其他处理此问题的建议.

解决方法

您可以实现自己的程序集属性:

[AttributeUsage(AttributeTargets.Assembly)]
public class ActivityAssemblyAttribute : Attribute
{
}

然后用这个属性装饰必要的程序集:

[assembly: ActivityAssemblyAttribute()]

并且,在需要时,只需检查所讨论的组件是否使用此属性进行修饰:

ActivityAssemblyAttribute attribute = null;
object[] attributes = assembly.GetCustomAttributes(typeof(ActivityAssemblyAttribute),false);
if (attributes.Length > 0)
{
   attribute = attributes[0] as ActivityAssemblyAttribute;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读