gpt4 book ai didi

c# - 在C#中动态加载一个类

转载 作者:太空宇宙 更新时间:2023-11-03 20:13:32 25 4
gpt4 key购买 nike

我正在尝试加载一个类(比如 Class1:Interface ),但不知道它在程序集中的名称。我的代码如下所示:

Assembly a = Assembly.LoadFrom("MyDll.dll");
Type t = (Type)a.GetTypes()[0];
(Interface) classInstance = (Interface) (ClasActivator.CreateInstance(t);

根据我在网上和MSDN上找到的文章,GetTypes()[0]应该返回Class1(MyDll.dll中只有一个类)。但是,我的代码返回 Class1.Properties.Settings。所以第 3 行创建了一个异常:

Unable to cast object of type 'Class1.Properties.Settings' to type Namespace.Interface'.

我真的不知道为什么以及如何解决这个问题。

最佳答案

程序集可以包含多个类型(您可能在 dll 中有一个 Settings.settings 文件,它在 Settings.Designer.cs 文件中创建了一个底层类),您只能在代码中获得第一个类你的情况原来是Settings类,您需要遍历所有类型并搜索具有所需接口(interface)的类型。

Assembly asm = Assembly.LoadFrom("MyDll.dll");
Type[] allTypes = asm.GetTypes();
foreach (Type type in allTypes)
{
// Only scan objects that are not abstract and implements the interface
if (!type.IsAbstract && typeof(IMyInterface).IsAssignableFrom(type));
{
// Create a instance of that class...
var inst = (IMyInterface)Activator.CreateInstance(type);

//do your work here, may be called more than once if more than one class implements IMyInterface
}
}

关于c# - 在C#中动态加载一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18320787/

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