控制反转/面向方面意义上的代理对象是什么?

关于什么是代理对象的任何好文章?
为什么你想要使用一个?
如何在C#中编写一个?

有帮助吗?

解决方案

通常,Proxy对象是一个对象(类的实例),它公开与“真实类”相同的公共接口。但只是将对其成员的所有调用转发给另一个真正的类。代理对象的使用有多种原因......

一个目的是“假装”成为真正的类,因此客户组件(或对象)可以“相信”它正在谈论“真实”的对象,但在代理内部,其他东西,(如日志记录,事务支持等)正在同时完成...其次,代理可以非常便宜地与真实对象进行比较。并且经常被使用以便当客户端不使用它们时可以节省(关闭或释放到池以供其他客户端使用)...代理保持“活着”状态。并且客户端认为它仍然与真实对象有连接,但只要它“调用”它。对象,它实际上是调用代理,它只是为了处理调用而获取另一个真实对象,然后在调用完成后释放真实对象。

关于控制反转(IOC)..这是指一种共同模式(也称为依赖注入),其中类中的依赖对象被“注入”。从客户端代码到类的实例,以控制实例将使用的依赖对象的哪个版本...可以使用IOC来注入“代理”代码。将对象放入一个认为它正在使用真实对象的类中......短语控制反转指的是这样一个事实:当使用这种模式时,决定调用哪个实际实现不再在进行调用的类的控制下,但是对于该类的客户端,当依赖对象的实例注入到要用于此调用的类中时。

通常,术语IOC与所谓的 IOC容器一起使用,这是一个专门设计用于根据有关这些类的松散耦合信息创建依赖类实例的类(类型)它来自除硬连线依赖之外的某些来源(最常见的是来自某种配置文件)。通常,当您使用IOC容器时,您在应用程序启动时创建它的实例,然后(通过读取配置数据或其他),您“注册” IOC容器将负责的每个类(类型),具有键值。密钥通常是此注册的所有实例必须实现的抽象类型或接口。然后,在应用程序的正常操作中,您可能会在其中新建一个这些类型的实例,您可以调用IOC容器,并使用抽象类型/接口作为键来请求它实例。然后,IOC容器使用反射或动态加载(或其他)来创建已经“注册”的任何类型的实例。用那把钥匙。通过这种方式,只需更改配置数据,即可控制应用程序使用的实际类型,在一个环境或部署位置更改它们与另一个环境或部署位置。

其他提示

关于这一点的非常好的资源是旧的“四人帮”。设计模式书。本书对任何开发面向对象软件的人都非常有用。 我个人使用代理对象来延迟加载NHibernate。我不使用具有控制反转的代理,因为我只使用IoC来解析接口类型。

查尔斯布雷塔纳的解释非常好。

我无法想象代理与AoP之间的关系。有人可以在这解释一下吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top