返回目录 概念 Microsoft.Practices.Unity.Interception是一个拦截器,它隶属于Microsoft.Practices.Unity组成之中,主要完成AOP的功能,而实现AOP方法拦截(页向切面)的基础就是IoC,我们需要配置相关接口或者类型的IoC方式,然后在生产对象时,使用Unity的方法进行动态生产对象,这时,你的Interception拦截器也会起作用! 相关技术 IoC: 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的…
1.记住这个单词的意思:Interception(拦截) 2.首先说一下原理和背景 原理:所谓的AOP就是面向切面编程,这里不多说,百度搜索. 目的:个人认为是为了解耦,部分代码跟业务代码分离,业务代码里面不掺杂其它功能,比如:记录异常.记录操作日志. 背景:项目基本功能已完成,产品要求记录用户的操作日志,新增的时候记录某人在某时做了某事(包括详细的信息,比如新增了哪些字段或者修改了哪些字段).于是着手在业务代码里写了大量的关于记录操作日志的代码,怎么看怎么别扭,像是被XX了的感觉. 3.解决办…
返回目录 这一讲中主要是说EnterpriseLibrary企业级架构里的caching组件,它主要实现了项目缓存功能,它支持四种持久化方式,内存,文件,数据库和自定义,对于持久化不是今天讨论的重要,今天主要说,如何使用AOP的思想再配合Caching组件来实现可更新的,可插拔的,松耦合的,基于数据集(结果集)的缓存方案,之所以叫它方案,确实,在实现上有一定难度,我自己对于微软的NLayerApp架构里用到的Attribute注入方式也对一定修改,因为NLayerApp里的缓存数据集并不支持方法…
创建 unity 的配置节处理程序时出错: The type name or alias Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Unity.Interception.Configuration could not be resolved.Please check your configuration file and verify this…
场景:我们做项目的时候常常会引用第三方日志框架来帮助我们记录日志,日志组件的用途主要是审计.跟踪.和调试.就说我最常用的日志组件log4net吧,这个在.NET同行当中应该算是用得非常多的一个日志组件了. 而同时,我们又经常使用IoC技术,来降低我们项目之间.模块之间的耦合度,比如我现在在用的Microsoft.Practices.Unity(当然Autofac也是非常好用的). 我们很清楚的知道log4net的优点,配置非常简单又非常完善,它能提供不同的日志级别.记录器.组织形式…… 比如说…
// // Summary: // Register a type mapping with the container. // // Parameters: // container: // Container to configure. // // injectionMembers: // Injection configuration objects. // // Type parameters: // TFrom: // System.Type that will be requeste…
PM>  Install-Package Unity Web.config <configSections> <section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection,Microsoft.Practices.Unity.Configuration" /> </configSections> <…
最近新入职了公司,做WPF方向的项目,进来后看到这边大量运用了依赖注入来解耦,采用的是Microsoft.Practices.Unity. WPF的话,目前主要有两个技术来实现IOC,unity和MEF,MEF前边也写过简单例子,这篇就简单入门下Unity. 之前接触IOC就是上家公司接手的烂尾项目了,B/S 项目用的是Ninject来实现IOC.对比了一下,其实大致道理都是差不多的.大体都是注册.标记,键值对存储实例对象. 下边贴出代码来感受下,首先对Unity定义一个接口Icontext,封…
Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入(Constructor Injection).属性注入(Property Injection),以及方法调用注入(Method Call Injection). 假设我们有下面的场景代码,在代码里面有一个很简单的customer对象,customer 对象有个save 方法, 这个方法通过调用ICusto…
Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入(Constructor Injection).属性注入(Property Injection),以及方法调用注入(Method Call Injection). 假设我们有下面的场景代码,在代码里面有一个很简单的customer对象,customer 对象有个save 方法, 这个方法通过调用ICusto…
Unity是微软Patterns & Practices团队所开发的一个轻量级的,并且可扩展的依赖注入(Dependency Injection)容器,它支持常用的三种依赖注入方式:构造器注入(Constructor Injection).属性注入(Property Injection),以及方法调用注入(Method Call Injection).现在Unity最新的版本的1.2版,可以在微软的开源站点http://unity.codeplex.com下载最新的发布版本和文档.通过使用Uni…
Type name could not be resolved. Please check config file http://stackoverflow.com/questions/14935645/type-name-could-not-be-resolved-please-check-config-file The solution turned out to be appending the name of the assembly to the end of themapTo val…
回到目录 说在前 本节主要说一下Unity家族里的拦截组件,对于方法拦截有很多组件提供,基本上每个Ioc组件都有对它的实现,如autofac,它主要用在orchard项目里,而castle也有以拦截的体现,相关可以看我的Castle~实现IoC容器这篇文章,而今天主要说一个Unity里的方法拦截的实现,事实上本篇文章是对第二回 缓存拦截器的一个扩展和补充,对于unity这东西在微软的Nlayer项目里有所体现,它是基于DDD构架的,无论在架构选型还是技术选型上都很超前,也都结合了很大微软高手的心…
看了园子里很多介绍Caching的文章,多数都只介绍基本机制,对于Cache更新和依赖部分,更是只简单的实现ICacheItemRefreshAction接口,这在实际项目中是远远不够的.实际项目中,至少应该考虑以下3点: 外部数据:通过外部服务,从其他系统取来的数据.我们无法控制,也不知道啥时候会被更新.对于这部分数据,我们采用定时更新的策略,默认1小时更新1次,可配置. 内部数据:系统自己产生的数据,可以完全掌控.对这部分数据,我们实现ICacheItemRefreshAction接口,一旦…
DI 依赖注入之unity的MVC版本使用Microsoft.Practices.Unity1.2与2.0版本对比 参考:https://www.cnblogs.com/xishuai/p/3670292.html 参考:https://docs.microsoft.com/en-us/previous-versions/msp-n-p/ff660914(v=pandp.20)?redirectedfrom=MSDN#config_registerelement 必读: 在unity1.2中我们…
返回目录 本篇文章可以说是第六回 Microsoft.Practices.EnterpriseLibrary.Caching实现基于方法签名的数据集缓存(可控更新,WEB端数据缓存)的续篇,事实上,有EnterpriseLibrary.Caching也只是实现缓存持久化的一种方式,而Redis做为成熟的分布式存储中间件来说,实现这个数据集缓存功能显得更加得心应手,也更加满足大型网站的设计规则.(在多web服务器时(web端实现负载均衡,反向代理),EnterpriseLibrary.Cachin…
string fileName = AppDomain.CurrentDomain.BaseDirectory + "\\log.txt";File.AppendAllText(fileName, "start\r\n", Encoding.UTF8); version 6.0.0.0 need set ExceptionManagerPM>  Install-Package EnterpriseLibrary.Logging PM>  Install-…
项目中使用了Microsoft.Practices.EnterpriseLibrary这个东西,根据名字猜测和微软有关系(可以翻译为:微软实践企业库). 看到了引入了两个命名空间: using Microsoft.Practices.EnterpriseLibrary.Data; using Microsoft.Practices.EnterpriseLibrary.Data.Sql; 在项目引用中发现了三个相关的dll文件: Microsoft.Practices.EnterpriseLibr…
Dora.Interception有别于其他AOP框架的最大的一个特点就是采用针对"约定"的拦截器定义方式.如果我们为拦截器定义了一个接口或者基类,那么拦截方法将失去任意注册依赖服务的灵活性.除此之外,由于我们采用了动态代码生成的机制,我们可以针对每一个目标方法生成对应的方法调用上下文,所以定义在拦截上下文上针对参数和返回值的提取和设置都是泛型方法,这样可以避免无谓的装箱和拆箱操作,进而将引入拦截带来的性能影响降到最低.(拙著<ASP.NET Core 6框架揭秘>于日前上…
        在前面我们学习到的是Unity依赖注入(DI)与统一容器来松散耦合,这个设计已经对我们系统带来了很多的好处.但是我们还会想尝试和遵循单一职责,开放封闭原则.比如我们不应该在我们的Business层去实现日志.校验.缓存.异常处理等工作,Unity的Interception可以帮助我们横切关注点(Crosscutting concerns 即AOP),来独立处理这些关注点.         什么是横切关注点(AOP)?横切关注点(AOP)是关注影响应用程序的许多区域.例如,你可能需…
问题: 错误:创建 cachingConfiguration 的配置节处理程序时出错: 未能加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项.系统找不到指定的文件 原因: 通过右键单击项目时添加的第三方dll,可能编译项目时并没有将dll拷贝进项目bin里,系统找不到指定的文件.…
System.Configuration.ConfigurationErrorsException: Invalid TraceListenerData type in configuration 'listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.Enterpr…
翻译 原文地址:http://www.devx.com/dotnet/Article/36184/0/page/1  原文作者:Thiru Thangarathinam (好强大的名字) 翻译: flanker 简介 日志程序块提供了灵活的可扩展的日志机制,你可以在任何类型的.NET程序中使用它——包括WinForms.ASP.NET.控制台程序等.它提供一些可重用的日志类(也称为监控器),可以把日志信息记录在多种载体上,包括数据库.XML文件.普通文件.事件记录等. 作为开发者,你仅需选择一个…
首先下载Microsoft Enterprise Library 5.0:http://www.microsoft.com/en-us/download/details.aspx?id=15104,这是一个安装包Enterprise Library 5.0.msi,选择目录后安装.1.引用dll 在安装位置的的文件中  或者  直接下载dll文件引用也可以 2.在配置文件中配置节点 <configuration><!--若是对于大型的网络而言,可能需要另外一种配置,那么安装包就需要全部选…
使用oracle数据库一个多月依赖这问题一直都得不到解决,最近任务不是很忙了,所以决定把这问题解决掉.写一篇文章做记录. 以上错误主要是net程序oracle数据库使用了Microsoft Enterprise Library 5.0 类库访问oracle数据库,其具有优秀的访问不通数据库的能力.使用方法不对也同样出现错误.解决办法是下载http://www.microsoft.com/en-us/download/confirmation.aspx?id=15104最新的类库并安装,安装后到安…
1. 新建WebApplication1项目 1.1 新建—Web—ASP.NET Empty Web Application--WebApplication1 1.2 添加一个WebForm1 2. 新建webService项目 2.1 新建—Web—ASP.NET Empty Web Application—WebApplicationService 2.2 选择WebApplicationService—右键—Add—WebService (ASMX)-- WebServiceGSS.as…
在Dora.Interception(github地址,觉得不错不妨给一颗星)中按照约定方式定义的拦截器可以采用多种方式注册到目标方法上.本篇文章介绍最常用的基于"特性标注"的拦截器注册方式,下一篇会介绍另一种基于(Lambda)表达式的注册方式.如果原生定义的这两种注册方式不能满足要求,利用框架提供的扩展,我们可以完成任何你想要的拦截器注册手段.(拙著<ASP.NET Core 6框架揭秘>于日前上市,加入读者群享6折优惠) 目录 一.InterceptorAttribu…
如果拦截器应用的目标类型是由自己定义的,Dora.Interception(github地址,觉得不错不妨给一颗星)可以在其类型或成员上标注InterceptorAttribute特性来应用对应的拦截器.如果对那个的程序集是由第三方提供的呢?此时我们可以采用提供的第二种基于表达式的拦截器应用方式.这里的拦截器是一个调用目标类型某个方法或者提取某个属性的Lambda表达式,我们采用这种强类型的编程方式得到目标方法,并提升编程体验.(拙著<ASP.NET Core 6框架揭秘>于日前上市,加入读者…
Redis的复制功能是完全建立在之前我们讨论过的基 于内存快照的持久化策略基础上的,也就是说无论你的持久化策略选择的是什么,只要用到了Redis的复制功能,就一定会有内存快照发生,那么首先要注意你 的系统内存容量规划,原因可以参考我上一篇文章中提到的Redis磁盘IO问题. Redis复制流程在Slave和Master端各自是一套状态机流转,涉及的状态信息是: Slave 端: Master端: 整个状态机流程过程如下: Slave端在配置文件中添加了slave of指令,于是Slave启动时读…
背景: 1. 什么是MemoryCache? memoryCache就是用电脑内存做缓存处理 2.使用范围? 可用于不常变的数据,进行保存在内存中,提高处理效率 代码: /// <summary> /// 基于MemoryCache的缓存辅助类 /// </summary> public static class MemoryCacheHelper { private static readonly Object _locker = new object(); public sta…