c# - 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);
解决方案
好的,我想我们终于有足够的信息来回答这个问题了。
问题是您已经创建了反射类使用的该接口的本地副本。
这只是行不通,Jitter 对这两个接口足够了解,知道它们不一样,它返回 null。
接口是两个实体之间的合同。您实际上试图做的是欺骗.Net,使其认为它具有相同的合同,简而言之,它不会被欺骗
由于从程序集中反映接口没有意义(因为您不能在设计时使用它)。唯一可用的选项是使该接口在两个程序集之间共享。这就是插件系统的工作方式。他们对彼此有足够的了解,可以通过接口进行通信。
推荐阅读
- julia - 警告:如果通常的建议不起作用,包 xxxxx 在 Julia 的依赖项中没有 POMDPSimulators。
- sas - 使用 SAS 中另一个变量的部分字符串创建新变量
- typescript - 在表达“这个对象字面量的值都是 T 类型”时保持类型安全。
- c++ - 表达式 SFINAE:如何根据类型是否包含具有一个或多个参数的函数来选择模板版本
- spring-boot - SpringCloud Config Server:路径映射与 SwaggerUI 冲突
- git - 如何在 GitHub ref/pull/*/merge 分支事件上触发 Google Cloud Build
- tableau-api - Tableau URL 操作筛选器添加到上下文
- angular - 角嵌套垫菜单扩展
- git - git push -> 仅审查当前更改(remote.origin.push 覆盖 push.default)
- android - Android studio 3.2 和 3.3 canary 13 中的 java 编译器显示很多警告