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

标签 c# .net inversion-of-control aop proxy-classes

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

有什么关于什么是代理对象的好文章吗?
为什么要使用一个?
以及如何用 C# 编写一个?

最佳答案

一般来说,代理对象是一个对象(类的实例),它公开与“真实类”完全相同的公共(public)接口(interface),但只是将对其成员的所有调用转发给另一个真实类。出于各种原因使用代理对象......

一个目的是“假装”成为真实的类,这样客户端组件(或对象)可以“相信”它正在与“真实”对象对话,但在代理内部,其他东西(如日志记录、事务支持, 等)同时进行...其次,与真实对象相比,代理可以非常便宜。并且经常被使用,以便在客户端不使用它们时可以保存真实对象(关闭或释放到池中以供其他客户端使用)...代理保持“事件”并且客户端认为它仍然具有与真实对象的连接,但无论何时它“调用”该对象,它实际上都是在调用代理,它会去获取另一个真实对象来处理调用,然后在调用完成时释放真实对象。

至于控制反转 (IOC)。这是指一种常见模式(也称为依赖注入(inject)),其中类内部的依赖对象被“注入(inject)”到类,从客户端代码,控制实例将使用哪个版本的依赖对象...... IOC 可用于将“代理”对象注入(inject)到它认为它正在使用真实对象的类中......短语控制反转 是指在使用此模式时,调用哪个实际实现的决定不再由进行调用的类控制,而是由该类的客户端控制,当它将一个依赖对象的实例注入(inject)到要用于此调用的类中时。

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

关于c# - 什么是控制反转/面向方面意义上的 .NET 代理对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/287479/

相关文章:

c# - IObservable<T> 使用 linq 查询

.net - 支持异步获取和异步实例创建的 IoC 容器

dependency-injection - 应该在哪里(层)使用 DI?

c# - Visual Studio 2010 内存消耗

c# - 检索 XML 文档并同时解析 HTTP header (C#)

c# - MVC - 将发布数据插入数据库

.net - 我应该在.NET应用程序中使用binary/xml文件吗?

c# - 如何证明 .NET CLR JIT 每次运行只编译每个方法一次?

c# - 控制反转和选择

c# - Android Xamarin 从 Android.Net.Uri 获取绝对路径