gpt4 book ai didi

c# - 装饰 .NET 程序集

转载 作者:行者123 更新时间:2023-11-30 14:12:18 29 4
gpt4 key购买 nike

这可能是一个远景,但 .NET 的灵 active 一直让我惊叹不已,所以开始吧。

我正在开发一个 MVC 应用程序,它需要在一组程序集中搜索派生自公共(public)基类的类类型。

即我有几个程序集,它们的事件类型都派生自 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;
}

关于c# - 装饰 .NET 程序集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18046962/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com