[EntLib]微软企业库5 0 学习之路 第十步 使用Unity解耦你的系统 PART4 Unity&PIAB
【Unity与PIAB的关系】 Unity是微软企业库5.0中的一个关键组件,它是一个强大的依赖注入容器,有助于实现解耦。在本部分,我们将深入理解Unity与Policy Injection Application Block (PIAB)之间的关系。PIAB是企业库的一部分,提供了一种实现面向切面编程(AOP)的方式,通过拦截器(Interception)来增强或修改对象的行为。 Unity.Interception是Unity的核心扩展,实现了拦截器功能,但它的具体实现并不包含在Unity基础库中,而是位于Unity.Interception库中。PIAB则提供了一套预定义的MatchRules和CallHandlers,方便开发者快速应用拦截功能。CallHandlers是实现了Unity.InterceptionExtension.ICallHandler接口的对象,它们定义了拦截行为。PIAB的MatchRules用于确定何时应用特定的CallHandler。 值得注意的是,PIAB实际上依赖于Unity.Interception,自身并没有实现拦截功能,而是依赖于Unity.Interception.PolicyInjection下的实现。这意味着你可以直接利用Unity接管PIAB的功能,包括其配置信息。 【使用Unity接管PIAB的功能实现】 在实际应用中,我们可能希望统一依赖管理和对象创建,以减少对PIAB的直接依赖。这可以通过Unity的配置和编程方式进行实现。以下是一个简单的代码示例,展示如何通过Unity配置拦截器: ```csharp IUnityContainer container = new UnityContainer().AddNewExtension<Interception>(); container.Configure<Interception>() // 为IStudentManage接口设置默认拦截器为TransparentProxyInterceptor .SetDefaultInterceptorFor<IStudentManage>(new TransparentProxyInterceptor()) // 添加名为"UserLog"的策略 .AddPolicy("UserLog") // 添加MemberNameMatchingRule,并通过InjectionConstructor初始化 .AddMatchingRule<MemberNameMatchingRule>( new InjectionConstructor(new ParameterOverride("memberName", "Login"))); ``` 这段代码展示了如何为接口IStudentManage配置拦截器,并定义了一个名为"UserLog"的策略,该策略将在执行Login方法时被触发。这样,原本由PIAB处理的拦截逻辑就转移到了Unity容器中。 此外,也可以通过XML配置文件来实现相同的效果,这种方式更便于配置管理和版本控制。例如: ```xml <unity xmlns="http://schemas.microsoft.com/practices/2010/unity"> <extension type="Microsoft.Practices.Unity.InterceptionExtension, Microsoft.Practices.Unity.Interception"/> <container> <register type="IStudentManage, YourAssembly" mapTo="YourConcreteStudentManageClass, YourAssembly"> <interceptor type="Microsoft.Practices.Unity.InterceptionExtension.TransparentProxyInterceptor, Microsoft.Practices.Unity.Interception"/> <interceptionBehavior type="YourCustomCallHandler, YourAssembly" name="UserLog" /> </register> <interception> <policy name="UserLog"> <match method="Login" /> </policy> </interception> </container> </unity> ``` 以上XML配置定义了相同的行为,即为IStudentManage接口注册并指定拦截器,以及定义了一个针对Login方法的拦截策略。 总结来说,通过理解Unity与PIAB的关系,我们可以利用Unity的拦截功能接管PIAB,实现更灵活的依赖注入和面向切面编程。这种做法有助于保持代码的简洁性和可维护性,同时充分利用企业库提供的强大功能。

























剩余6页未读,继续阅读


- 粉丝: 8
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于asyncio和aiohttp的七牛云Python异步客户端。.zip
- 基于 SQLAlchemy 和 Pydantic 的异步 Python
- 基于android,uiautomator2,opencv-python基于图片识别算法自动化统计页面加载.zip
- 基于bugscanner的python网站指纹识别练习脚本.zip
- 基于brython与codemirror的前端python运行页面.zip
- 基于blockly 生成 python scrapy代码练手小项目.zip
- 基于FFmpeg的python视频处理包-因疫情影响,工作比较繁忙,心情也没在视频上面再研究,该项目已经搁置,源码很简单,大家可以自己研究一下自己扩展.zip
- 基于Django 2.1.2 和Python 3 的个人漫画管理网站.zip
- 基于ES构建的一个简单的检索式问答系统,主要用来学习下python相关的ES操作.zip
- 基于Golang的GitHub反向代理下载 python源码来自:https___github.com_hunshcn_gh-proxy.zip
- 基于hash向量和共现矩阵的python聚类:DBSCAN、k-means、agglomerative.zip
- 基于Flask的Python全国招聘岗位就业可视化系统.zip
- 基于Jupyter notebook的一本python入门书。.zip
- 基于Keras预训练模型VGG16、ResNet50、InceptionV3,使用Python的HTTP框架Flask搭建图像识别接口.zip
- 基于kafka和python实现的某个功能.zip
- 基于Numpy和Boost__Python实现的矩量法.zip


