- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在使用WCF时,我们可以定义一个服务契约:
[ServiceContract]
public interface IMyService
{
[OperationContract]
int MyOperation(int x);
}
假设我在 www.example.com/MyService
打开一个服务主机,那么从我的客户端使用此服务的一种方法是
IMyService service =
new ChannelFactory<IMyService>(new BasicHttpBinding(),
new EndpointAddress("www.example.com/MyService")).CreateChannel();
int result = service.MyOperation(10);
因此,service
以某种方式实现了 IMyService
,尽管这从未明确完成。如果我调试这些行,我可以看到 service
是 __TransparentProxy
的一个实例.从源代码可以看出,该类中的注释是
Transparent proxy magically creates a message that represents a call on it and delegates to the Real proxy to do the real remoting work.
对我来说这确实是“魔法”,但我想一定有一个合乎逻辑的解释。
这里的模式非常有用。我想要的是像下面的 Magic
这样的类(语法不正确,我知道,否则我不需要问)。为了争论起见,假设我希望此类打印所调用方法的名称。
public class Magic<T> : T {
// don't know what to do here
}
这样我就可以打电话
IMyService service = new Magic<IMyService>();
service.MyOperation(10);
这将打印:
MyOperation
这样的事情可能吗? (应该是,因为 __TransparentProxy
做了类似的事情。)如果是这样,它是如何工作的?
最佳答案
Codeplex 上有几篇文章试图做一些类似于 WCF 在幕后所做的事情:
http://www.codeproject.com/Articles/43598/Emit-Proxy http://www.codeproject.com/Articles/5511/Dynamic-Proxy-Creation-Using-C-Emit
System.Reflection.Emit
命名空间是底层键,可用于在代码中动态创建 .NET 程序集和类型。
关于c# - __TransparentProxy 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16686840/
在使用WCF时,我们可以定义一个服务契约: [ServiceContract] public interface IMyService { [OperationContract] in
目标 我有几个接口(interface)和一些为这些接口(interface)提供实现的 dll。我想将实现加载到新的 AppDomain 中(这样我可以稍后卸载 dll)并在新的 AppDomain
我是一名优秀的程序员,十分优秀!