首页 > 解决方案 > C# 将程序集类转换为类型

问题描述

有没有办法将类从外部(托管)程序集转换为特定接口?

我的意思是不要打电话MethodInfo.Invoke(instance, parameters);,而是做这样的事情

Assembly assembly = Assembly.LoadFrom(assemblyName);
System.Type type = assembly.GetType(typeName);
Object o = Activator.CreateInstance(type);
IYourType yourObj = (o as IYourType);

更新

我有一个具有已知接口的外部程序集,是的,我有程序集中引用的那个的本地副本。检查显示 o 的类型为 assembly.GetType(typeName);

标签: c#reflectioncasting

解决方案


好的,我想我们终于有足够的信息来回答这个问题了。

问题是您已经创建了反射类使用的该接口的本地副本。

这只是行不通,Jitter 对这两个接口足够了解,知道它们不一样,它返回 null。

接口是两个实体之间的合同。您实际上试图做的是欺骗.Net,使其认为它具有相同的合同,简而言之,它不会被欺骗

由于从程序集中反映接口没有意义(因为您不能在设计时使用它)。唯一可用的选项是使该接口在两个程序集之间共享。这就是插件系统的工作方式。他们对彼此有足够的了解,可以通过接口进行通信。


推荐阅读