我有一个奇怪的要求,
实际上我们的解决方案是:
- 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,该dll充当另一个代理的代理?
我需要代理所有:方法,属性,事件。
感谢您的帮助。
NB :是一个旧项目,必须使用Framework 2.0
更新
如果反射不是正确的方法,则可以进行这种封装吗?那事件呢?
外部DLL:
public class NastyExternalClassInExternalDll
{
public void Foo() { ... }
}
MainDLL:
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();
}
}