在插件 dll 中子类对象模板的最佳方法
本文关键字:最佳 方法 对象 插件 dll 子类 | 更新日期: 2023-09-27 17:56:19
我有4个类; A
、B
、C
和D
我想根据某些标准动态加载这些类
这些类位于其自己的 C# 类库 (dll) 项目中。这些类使用Helix3D工具包。
-
我如何设计一个插件系统来读取插件文件夹中的所有.dll文件,并允许在需要时以某种方式标记或编号(静态值可以做到这一点吗?
-
如果我在 dll 中引用
A
类,而A
类在主项目中,插件文件夹中的 dll 在动态加载到主应用程序中时会自动找到插件的类子类A
类吗?
我编辑了你的问题,因为它太长太冗长(3000 个字符)。
对问题1的回答
要动态加载 dll,请查看此答案。它使用反射循环访问程序集中的每个类型,并使用Activator.CreateInstance()
来实例化类。
对于您的插件系统,我会创建类似的东西:
在您的.exe中:
public interface IPlugin
{
void DoSomething();
}
public class A : IPlugin
{
public virtual void DoSomething() {}
}
public class B : IPlugin
{
public virtual void DoSomething() {}
}
public class C : IPlugin
{
public virtual void DoSomething() {}
}
public class D : IPlugin
{
public virtual void DoSomething() {}
}
在 DLL 中:
public class NewA : A
{
public override void DoSomething() { base.DoSomething() }
}
public class NewB : B
{
public override void DoSomething() { base.DoSomething() }
}
public class NewC : C
{
public override void DoSomething() { base.DoSomething() }
}
public class NewD : D
{
public override void DoSomething() { base.DoSomething() }
}
在客户端代码中,针对 IPlugin
编写代码。你的客户端代码不知道具体的类A
、B
、C
、D
。
从您拥有的 dll 中加载所需的类,并将它们注入到IPlugin
对问题2的回答
只要类位于不同的命名空间中,就可以具有相同的类名,而不能在同一命名空间中具有相同名称的类。在您的情况下,它们应该位于不同的命名空间中,因此您可以。