C# - 来自自定义程序集的加载类型



我正在编写一个 C# 应用程序,该应用程序可能引用我也在编写的类库。类库旨在作为我可能想要使用的其他类库的模板。我的目的是动态加载和使用类库生成的程序集中的类型。我想根据可配置的设置加载类型。此时,我的设置如下所示:

"MyOrg.MyApp.Services.Example, MyOrg.MyApp.Services">

这个字符串的意思是我想在MyOrg.MyApp.Services命名空间中使用Example类,该类来自 MyOrg.MyApp.Services.dll。我基于type属性基于在 app.config 文件中自定义配置部分的section元素中使用的 属性,如下所示。

我的问题是,如何加载此程序集并从此字符串中实际获取Example类的实例?目前,我有:

Assembly assembly = Assembly.Load("MyOrg.MyApp.Services.Example, MyOrg.MyApp.Services");

但是,当我运行它时,我收到以下错误:

无法加载文件或程序集"MyOrg.MyApp.Services.Example\, MyOrg.MyApp.Services"或其依赖项之一。给定的程序集名称或代码库无效。

我知道问题是因为在我的字符串中命名了一个类型。如果我只使用 MyOrg.MyApp.Service",程序集加载正常。但是,我没有看到加载Example类型的方法。

我忽略的实用程序方法是否允许我执行此操作?如果没有,如何从自定义程序集加载特定类型?谢谢!

有许多不同的方法可以做到这一点。一种方法是从应用程序可访问的文件路径加载程序集,使用其全名获取所需的类型,然后使用静态激活器类获取它的实例。

Assembly asm = Assembly.LoadFrom("file path to your assembly");
Type typ = asm.GetType("MyOrg.MyApp.Services.Example, MyOrg.MyApp.Services");
object instance =  Activator.CreateInstance(typ);

请记住,除非使它遵循接口并在实例化后将其强制转换为该接口,否则您将无法以类型安全的方式访问此实例上的成员,但这是一个不同的主题。

相关内容

最新更新