【发布时间】:2019-12-16 22:21:54
【问题描述】:
我有一个奇怪的要求,
其实我们的解决方案是这样的:
- APP.EXE -> MYDLL.DLL
APP.EXE 使用 MYDLL 组装方法。
现在客户端请求实现这个变体:
- APP.EXE -> MYDLL_PROXY.DLL -> MYDLL.DLL(动态加载)
MYDLL_PROXY.DLL 必须像代理一样运行,因此调用“MYDLL_PROXY.Method1”将加载外部 MYDLL.DLL 并在其上调用 Method1 并返回结果。
类似这样的反射:
//MYDLL_PROXY.dll
ass = Assembly.LoadFrom(@"C:\mydll.dll");
String MyGenericMethod ="Something"
Type MyType = ass.GetTypes()[0];
Object o = Activator.CreateInstance(MyType);
MethodInfo Method = ass.GetTypes()[0].GetMethod(MyGenericMethod);
return Method.Invoke(null, new object[] { /* parameters go here */ });
所以,在生气之前,有一种快速的方法来创建一个假的 dll,就像另一个代理一样?
我需要代理所有:方法、属性、事件。
感谢您的帮助。
NB:是一个老项目,必须使用 Framework 2.0
更新
如果反射不是正确的方法,像这样的封装是可能的吗?那么事件呢?
外部DLL:
public class NastyExternalClassInExternalDll
{
public void Foo() { ... }
}
主DLL:
public interface IFooable
{
void Foo();
}
public sealed class NastyExternalClassWrapper : IFooable
{
private readonly NastyExternalClassInExternalDll original;
public NastyExternalClassWrapper(NastyExternalClass original)
{
this.original = original;
}
public void Foo()
{
original.Foo();
}
}
【问题讨论】:
-
是一个老项目,必须使用 Framework 2.0
-
所以我没有访问动态库的权限:/
-
为什么还要使用反射?
-
你建议@DavidBrowne-Microsoft 什么?我已经开发了一个通用接口,所以“main-fake-proxy-dll”和“real-external-dll”实现了,所以现在我被卡住了!我需要“扩展”它,但我不知道如何使用动态加载的 DLL:/
标签: c# dll system.reflection