代理模式
Posted qgbo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代理模式相关的知识,希望对你有一定的参考价值。
WCF 中用到代理了? 客户端是这个样子:父类也贴出来了
public partial class Service1Client : System.ServiceModel.ClientBase<WCF代理客户端.ServiceReference1.IService1>, WCF代理客户端.ServiceReference1.IService1 public Service1Client() public Service1Client(string endpointConfigurationName) : base(endpointConfigurationName) public Service1Client(string endpointConfigurationName, string remoteAddress) : base(endpointConfigurationName, remoteAddress) public Service1Client(string endpointConfigurationName, System.ServiceModel.EndpointAddress remoteAddress) : base(endpointConfigurationName, remoteAddress) public Service1Client(System.ServiceModel.Channels.Binding binding, System.ServiceModel.EndpointAddress remoteAddress) : base(binding, remoteAddress) public void DoWork() base.Channel.DoWork(); public System.Threading.Tasks.Task DoWorkAsync() return base.Channel.DoWorkAsync();
// // 摘要: // 提供基实现,用于创建可调用服务的 Windows Communication Foundation (WCF) 客户端对象。 // // 类型参数: // TChannel: // 用于连接服务的通道。 public abstract class ClientBase<TChannel> : ICommunicationObject, IDisposable where TChannel : class // // 摘要: // 使用应用程序配置文件中的默认目标终结点初始化 System.ServiceModel.ClientBase`1 类的新实例。 // // 异常: // T:System.InvalidOperationException: // 配置文件中没有默认的终结点信息,或者文件中有多个终结点,或者没有配置文件。 protected ClientBase(); // // 摘要: // 使用应用程序配置文件中由 System.ServiceModel.ClientBase`1 指定的配置信息来初始化 endpointConfigurationName // 类的新实例。 // // 参数: // endpointConfigurationName: // 应用程序配置文件中的终结点的名称。 // // 异常: // T:System.ArgumentNullException: // 指定的终结点信息为 null。 // // T:System.InvalidOperationException: // 无法找到终结点或者终结点协定无效。 protected ClientBase(string endpointConfigurationName); // // 摘要: // 新实例初始化 System.ServiceModel.ClientBase`1 类使用指定 System.ServiceModel.Description.ServiceEndpoint。 // // 参数: // endpoint: // 允许客户端查找并与服务通信的服务的终结点。 protected ClientBase(ServiceEndpoint endpoint); // // 摘要: // 通过使用 System.ServiceModel.ClientBase`1 作为双工对话中的回调对象来初始化 callbackInstance 类的新实例。 // // 参数: // callbackInstance: // 客户端应用程序用以侦听来自所连接服务的消息的回调对象。 // // 异常: // T:System.ArgumentNullException: // 回调实例为 null。 // // T:System.InvalidOperationException: // 配置文件中没有默认的终结点信息,或者文件中有多个终结点,或者没有配置文件。 protected ClientBase(InstanceContext callbackInstance); // // 摘要: // 初始化 System.ServiceModel.ClientBase`1 类的新实例。 // // 参数: // endpointConfigurationName: // 应用程序配置文件中的终结点的名称。 // // remoteAddress: // 服务的地址。 // // 异常: // T:System.ArgumentNullException: // 终结点为 null。 // // T:System.ArgumentNullException: // 远程地址为 null。 // // T:System.InvalidOperationException: // 无法找到终结点或者终结点协定无效。 protected ClientBase(string endpointConfigurationName, string remoteAddress); // // 摘要: // 使用指定的目标地址和终结点信息初始化 System.ServiceModel.ClientBase`1 类的新实例。 // // 参数: // endpointConfigurationName: // 应用程序配置文件中的终结点的名称。 // // remoteAddress: // 服务的地址。 // // 异常: // T:System.ArgumentNullException: // 终结点为 null。 // // T:System.ArgumentNullException: // 远程地址为 null。 // // T:System.InvalidOperationException: // 无法找到终结点或者终结点协定无效。 protected ClientBase(string endpointConfigurationName, EndpointAddress remoteAddress); // // 摘要: // 使用指定的绑定和目标地址初始化 System.ServiceModel.ClientBase`1 类的新实例。 // // 参数: // binding: // 用于调用服务的绑定。 // // remoteAddress: // 服务终结点的地址。 // // 异常: // T:System.ArgumentNullException: // 绑定为 null。 // // T:System.ArgumentNullException: // 远程地址为 null。 protected ClientBase(Binding binding, EndpointAddress remoteAddress); // // 摘要: // 使用指定的回调服务和终结点配置信息初始化 System.ServiceModel.ClientBase`1 类的新实例。 // // 参数: // callbackInstance: // 客户端用以侦听来自所连接服务的消息的回调对象。 // // endpointConfigurationName: // 应用程序配置文件中的终结点的名称。 // // 异常: // T:System.ArgumentNullException: // 回调实例为 null。 // // T:System.ArgumentNullException: // 终结点为 null。 // // T:System.InvalidOperationException: // 无法找到终结点或者终结点协定无效。 protected ClientBase(InstanceContext callbackInstance, string endpointConfigurationName); // // 摘要: // 使用指定的 System.ServiceModel.ClientBase`1 和 System.ServiceModel.InstanceContext // 对象初始化 System.ServiceModel.Description.ServiceEndpoint 类的新实例。 // // 参数: // callbackInstance: // 客户端应用程序用以侦听来自所连接服务的消息的回调对象。 // // endpoint: // 允许客户端查找并与服务通信的服务的终结点。 protected ClientBase(InstanceContext callbackInstance, ServiceEndpoint endpoint); // // 摘要: // 初始化 System.ServiceModel.ClientBase`1 类的新实例。 // // 参数: // callbackInstance: // 回调服务。 // // binding: // 用于调用服务的绑定。 // // remoteAddress: // 服务终结点的地址。 // // 异常: // T:System.ArgumentNullException: // 回调实例为 null。 // // T:System.ArgumentNullException: // 绑定为 null。 // // T:System.ArgumentNullException: // 远程地址为 null。 protected ClientBase(InstanceContext callbackInstance, Binding binding, EndpointAddress remoteAddress); // // 摘要: // 初始化 System.ServiceModel.ClientBase`1 类的新实例。 // // 参数: // callbackInstance: // 客户端用以侦听来自所连接服务的消息的回调对象。 // // endpointConfigurationName: // 应用程序配置文件中的终结点的名称。 // // remoteAddress: // 服务的地址。 // // 异常: // T:System.ArgumentNullException: // 回调实例为 null。 // // T:System.ArgumentNullException: // 终结点为 null。 // // T:System.ArgumentNullException: // 远程地址为 null。 // // T:System.InvalidOperationException: // 无法找到终结点或者终结点协定无效。 protected ClientBase(InstanceContext callbackInstance, string endpointConfigurationName, EndpointAddress remoteAddress); // // 摘要: // 初始化 System.ServiceModel.ClientBase`1 类的新实例。 // // 参数: // callbackInstance: // 客户端用以侦听来自所连接服务的消息的回调对象。 // // endpointConfigurationName: // 应用程序配置文件中的终结点的名称。 // // remoteAddress: // 服务的地址。 // // 异常: // T:System.ArgumentNullException: // 回调实例为 null。 // // T:System.ArgumentNullException: // 终结点为 null。 // // T:System.ArgumentNullException: // 远程地址为 null。 // // T:System.InvalidOperationException: // 无法找到终结点或者终结点协定无效。 protected ClientBase(InstanceContext callbackInstance, string endpointConfigurationName, string remoteAddress); // // 摘要: // 获取或设置缓存设置。 // // 返回结果: // 该缓存设置。 public static CacheSetting CacheSetting get; set; // // 摘要: // 获取 WCF 客户端可连接的服务的目标终结点。 // // 返回结果: // 目标终结点。 public ServiceEndpoint Endpoint get; // // 摘要: // 获取基础 System.ServiceModel.IClientChannel 实现。 // // 返回结果: // WCF 客户端对象的客户端通道。 public IClientChannel InnerChannel get; // // 摘要: // 获取 System.ServiceModel.ClientBase`1 对象的当前状态。 // // 返回结果: // 对象的 System.ServiceModel.CommunicationState 的值。 public CommunicationState State get; // // 摘要: // 获取用于调用操作的客户端凭据。 // // 返回结果: // 返回一个 System.ServiceModel.Description.ClientCredentials,它表示客户端所提供的身份证明。 public ClientCredentials ClientCredentials get; // // 摘要: // 获取基础 System.ServiceModel.ChannelFactory`1 对象。 // // 返回结果: // 一个 System.ServiceModel.ChannelFactory`1 对象。 public ChannelFactory<TChannel> ChannelFactory get; // // 摘要: // 获取用于将消息发送到不同配置的服务终结点的内部通道。 // // 返回结果: // 指定类型的通道。 protected TChannel Channel get;
这个叫泛型代理吧。
2.https://github.com/aspnet/EntityFrameworkCore/blob/release/3.1/src/EFCore/DbContext.cs 这个DBContext 也是组合了一下,也是代理的一种应用。
以上是关于代理模式的主要内容,如果未能解决你的问题,请参考以下文章
设计模式代理模式 ( 代理模式结构 | 客户端 | 主题对象 | 被代理对象 | 代理对象 )
设计模式 结构型模式 -- 代理模式(动态代理(CGLIB动态代理)三种代理的对比(静态代理动态代理(JDK代理和CGLIB代理)优缺点使用场景))