C#-自定义部件的加载类型
我正在编写一个C#应用程序,它可能引用我正在编写的类库。类库旨在成为我可能要使用的其他类库的模板。我的目的是从类库生成的程序集中动态加载和使用类型。我想根据可配置的设置加载类型。此时,我的设置如下所示: “MyOrg.MyApp.Services.Example,MyOrg.MyApp.Services” 这个字符串的意思是我想使用C#-自定义部件的加载类型,c#,reflection,C#,Reflection,我正在编写一个C#应用程序,它可能引用我正在编写的类库。类库旨在成为我可能要使用的其他类库的模板。我的目的是从类库生成的程序集中动态加载和使用类型。我想根据可配置的设置加载类型。此时,我的设置如下所示: “MyOrg.MyApp.Services.Example,MyOrg.MyApp.Services” 这个字符串的意思是我想使用MyOrg.MyApp.Services命名空间中的Example类,它来自MyOrg.MyApp.Services.dll。我将此设置格式基于app.config文
MyOrg.MyApp.Services
命名空间中的Example
类,它来自MyOrg.MyApp.Services.dll。我将此设置格式基于app.config文件中自定义配置节的节
元素中使用的类型
属性,如图所示
我的问题是,如何加载此程序集并从该字符串中实际获取Example
类的实例?目前,我有:
Assembly assembly = Assembly.Load("MyOrg.MyApp.Services.Example, MyOrg.MyApp.Services");
但是,当我运行该命令时,我收到以下错误:
无法加载文件或程序集“MyOrg.MyApp.Services.Example\、MyOrg.MyApp.Services”或其依赖项之一。给定的程序集名称或代码基无效
我知道问题是因为在我的字符串中命名了一个类型。如果我只使用MyOrg.MyApp.Service”,程序集可以很好地加载。但是,我看不到加载示例
类型的方法
是否有一种我忽略的实用方法允许我这样做?如果没有,我如何从自定义程序集中加载特定类型?谢谢!有许多不同的方法可以这样做。一种方法是从应用程序可访问的文件路径加载程序集,使用其全名获取所需类型,然后使用静态激活vator类来获取它的实例
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);
请记住,除非在实例化后使其附着到接口并将其强制转换到该接口,否则您将无法以类型安全的方式访问此实例上的成员,但这是另一个主题。将类库添加为对的引用。并且您可以使用与引用相同的方法来使用这些类,如System.dll或[your Dispaly Technology].dllyou无法加载类型,只能加载包含要实例化的类型的整个程序集