概念
Microsoft.Practices.Unity.Interception是一个拦截器,它隶属于Microsoft.Practices.Unity组成之中,主要完成AOP的功能,而实现AOP方法拦截(页向切面)的基础就是IoC,我们需要配置相关接口或者类型的IoC方式,然后在生产对象时,使用Unity的方法进行动态生产对象,这时,你的Interception拦截器也会起作用!
相关技术
IoC: 控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。 控制反转一般又被称为依赖注入(Dependency Injection,简称DI)。即将配置中的对象,动态注入到项目程序当中,使程序的某个功能可以动态进行切换。
AOP: 面向切面编程(也叫面向方面编程):Aspect Oriented Programming(AOP),是软件开发中的一个热点。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
一般用它来实现:日志记录,性能统计,安全控制,事务处理,异常处理等等。
持久化方式
目前我的Project.UnityCaching组件支持Microsoft.Practices.EnterpriseLibrary.Caching和Redis两种数据持久化的方式,前者也是Microsoft.Practices. EnterpriseLibrary企业库的一部分,主要实现内存持久化(也可以实现文件持久化),主要用在单台WEB服务器上;后者可以单独部署到一台或者多台服务器上,主要实现分布式缓存,它是未来的大数据的一个方向。
键名组成
缓存解决方案名_命名空间_方法名,其中缓存解决方案名可以自己去配置,对应config中的CacheProjectName节点,而键对应的值采用字典类型,字典的键对应方法的各参数的组合。
涉及到的相关程序集
IoC基础库程序集
aaarticlea/png;base64,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" alt="" />
Redis基础库程序集
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAATgAAAB3CAIAAAAYZMswAAAHSUlEQVR4nO3cT4obRxTH8ckpcgWdIOscw6Acw5usB2Y98jIwN9AwMwwDQraxyTAbb7KSMRmCQ8Ah2SS2/qv/qLNQIuSuqtfV/dolVfT9LIzQVFe97uofLSXonRQADt7JvgsAUE0V1O/9tFUrcLR4ogIRIKhABAgqEAGCCkSAoAIRIKhABFRBfS1KkqStKoEjpw1qlqZZluZ5lufZep2v13mWpet1/ubNm+FwOJlO2ioUOGaqoL569SpNEzOr63X+8PAwn8+fP38+Ho/bqhU4Wqqgvnz5MklW1qwOh8PBYDAYDIbDYVu1AkdLFdQXL14kq2WSrLI07d+POt3e1cO7xXK5yervHz78+v49QQX0VEEdDoer5SJL0063l+fZ47h4HBedbm+9zreP1sFgYFl1h6aAzVQNDtGv7nP4yecar+VThrnKF10Xgal2cTAYLBfz/v0oz7Pb0Z+db797+7H46bfZ1cM7Iailm0lTQAOu1ZsF3mfA7r8tTm4daR5FUP8fVLt4d3e3mM873d7juPjq62+S1erqfvTzX7NOt5dn/35fvbu7Ky+511vHtfqXCGrjmWsdRVCPgWoXb29v57NZ/360+dD7w9WPb//4+/R69OTps9PrUZ6leZ7d3t5aVrV9JNt9s/SJrvj8g5z5wpzH/BAorG79lFg5zPWZ06yn1pn6zCmcaeXqiJFqF29ububT6Xw263R7v0yLx3Fxej3qdHtJmnW6vdPrUZalNzc3zrVtd5h5BwtjCuNGtM4jj2w8zzZgrhOsNbNcjzAtQT0Gql28vLycTSaz6XQ+m27+q++Tp8+SNDu9HiVp9uTpsyxNLy8vpeWNZ4grV4XfDS08YOWbWDjQc4CL67GsDBhBPSqqXez3+9PxeJvVxXxWeqKmadLv98tLig9S67DdNxsEtXJ1YZhPhXIYPCvkiQqBahcvLi4m4/FnWZ3Ntt9RN/+L9eLioryk4xG3+6bPM9A1zPq8Mmd2PSGFOl0V7r5wnax8pubqpXeseTtxM/9qHo6IqPbv/Px88unTZPzpv6xONlldzOfLxWK1XCSr5fn5eVu1AkdLFdSzs7Pxx4/brE5tWT07O2urVuBoqYJKF0IgDL66ABEgqEAECCoQAYIKRICgAhEgqEAEVEGlCyEQhjaodCEEAlAFlS6EQBiqoNKFEAhDFVS6EAJhqIJKF8IWFyoNa1yb9Yd4pXqazYw9Uu0ZXQj9x9QarCSfF0GNkWrP6ELoP4agQkO1Z3QhdB2rn9k1QI6Z9dzNMcIMOEyqPaMLoXlgiTnGs0K5PGEteR7PqXBoVHtGF0KfR5z5wjWzTz211nLNI0yCw6TaM7oQCqUq53HNWWsteTlERLVndCHcfS2X55rHulblAHMtc1iJ+VfzcBws1W7RhRAIQxVUuhACYaiCShdCIAy+qAARIKhABAgqEAGCCkSAoAIRIKhABFRBpQshEIY2qHQhBAJQBZUuhEAYqqDShRAIQxVUuhACYaiCShdC/4W+0M/KQv5mzedXeAHKOE6qK0sXwraGNbsOh3P1XO+gLaorSxfCtoYRVMhUV5YuhK5jS0eZM1R+bpSvhjxVg6shn4JrHuFM0S7VlaULoXmgqa2zqAyGf82uMipPgaDui+rK0oWw8kEkVCgHtXJ1Zc2l1eWzIKh7p7qydCEUSvWfucFZ6GuunK1uzfIMUFJdWboQ7r4WypOPklevPE3/mq3vWA8pDCdu1jNFu1TXlC6EQBiqoNKFEAhDFVS6EAJh8HUCiABBBSJAUIEIEFQgAgQViABBBSKgCipdCIEwtEGlCyEQgCqodCEEwlAFlS6EQBiqoNKFEAhDFVS6EIZZS8n8MZpZ3r5qgyfVDtGFsNla4cmVENTDp9ohuhAqBwRDUGOn2iG6ELqO3R0gn7752dh8x+coF+vV8KwTh0O1Q3QhNA8U5hQOl/+tdV7yWVjHE9TDp9ohuhDKzzSCiraodoguhEKprvkJKhpQ7RBdCHdfm+XJFe6eUWVQzaN8Vi+dRYn5V/NwHAjV3tCFEAhDFVS6EAJhqIJKF0IgDL6WABEgqEAECCoQAYIKRICgAhEgqEAEVEGlCyEQhjaodCEEAlAFlS6EQBiqoNKFEAhDFVS6EAJhqILarAthrd9VmT89q1uk64dd5rC6M9etwbo6PzGDD9X90awLYeH3o2dzcAOukLcVDP955NUJKmSq+6NZF8JiT0Fta85m8xBUaKjuD2UXwtLd6XpnN9WuAXUDWbl06U3rQp6fWq0HetYJbKjuj8ZdCLdf2ErvyC8KW8DkCv0D7Jq5Vj3CQgQVGqr7o3EXQuvdbz4/Sy8Kxy0u3OWaoDarxzUtQYWG6v5o1oWwqHpMCX/SfMStFRVlPXWPIqiQqe4PZRfC7Wvz/dI7u4OFAYX7kWt9dAtLW+s0azZPwbxKJ26ueoAS1Z1BF0IgDFVQ6UIIhKEKKl0IgTD4UgREgKACESCoQAQIKhABggpEgKACEfgHVUWpoWshkR8AAAAASUVORK5CYII=" alt="" />
Project.Frameworks自封装程序集
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAASsAAABDCAIAAABLFrRgAAAFQUlEQVR4nO2cwW7qRhSG06foK/AEXfcxItHHyKZrJNaQZSXeABQQQrKcRKkascmmK19dNapuVelW7aZNDDbgGdtd0FqJZzwzxwyMr/m/FTHjc/4zPr8N94pzkQMA3HHhWgAAZw3BgT8qSZLkeCoBaCs0B3LGOGdpytOUZ1maZSnnLMvSp6cn3/dX69XxhALQSggOfHh4YCwRTZhl6XK5jOP49vY2DMPjaQWgfRAceH9/nyQ7qQl93/c8z/M83/ePpxWA9kFw4N3dXbLbJsmOMzZ+DDrd4c3y42a73Zvwj8+ff/v0CQ4EgATBgb7v77YbzlinO0xT/hzmz2He6Q6zLC0ehp7nlRO8oY6+WmepAxYx1apqpK5RbNVii4UXKURth1waYAXC1nuet93E48cgTfk8+Kvz7XcfXvKff49ulh8VDszfNNNprrQ2S2096vWlzrYV1gpqbXCgQwhbv1gsNnHc6Q6fw/yrr79Jdrubx+CXv6NOd5jy/74TLhYLSY7zc6DFsFaAAxsLYevn83kcRePHYP/584ebnz78+U9vGlxeXfemQcpZmvL5fC7J8f6jTulDUWmZeKLJkVJwQ6uUPpuZiJEmUietoVn6pyKOol5p8KoNAaeHsPWz2Sxer+Mo6nSHv67z5zDvTYNOd5gw3ukOe9OAczabzSQ5ZJdcbCbpYmnrKF5I01XpocZRa5bmNcllkt3wLG12k7rAKSFs/WQyiVaraL2Oo/X+30Ivr64TxnvTIGH88uqaMzaZTCQ5DC65oQPFp4dJOm2uQxyodYJWcz0HFpGlSc0jK5SDE0DY+vF4vA7DwoSbOCo9AxlLxuOxJIc9B2rjVB1U56rdqVXWIj2yDnwGKoADmw9h60ej0SoM35kwiorvgfv/KhyNRuUEsu8h0pt31cEa0Uyek28XFH+WXmhFauW9PajIqM6uXmNSqRTxXfF0cGwImz4YDFavr6vw9X8TrvYm3MTxdrPZbTfJbjsYDCzra3ZbOJSnuBGALwjClev3++HLS2HCtcyE/X7fjqzG35WbIK/5uwS0EC7e92YcTysA7QO3TwBcAgcC4BI4EACXwIEAuAQOBMAlcCAALiE4ELPSALAOzYGYlQaAXQgOxKw0AKxDcCBmpQFgHYIDMSsNAOsQHNimWWlaSeayq35SJD0CQAlCc7RmVpp2DfWHP+r1cCBQQGiO1sxK066h6oQDQW0IzdGaWWk5Zd6ENo5YhTYXAAWE5mjNrDRFluLWoI1gnh0OBAoIzdGaWWmKLHAgODGE5mjNrDRFFtGBimhwIDgcQnO0Y1baxXuqspt8wROjlSJX5QKggNAWmJUGgHUI/Y1ZaQBYB7PSAHAJHjIAuAQOBMAlcCAALoEDAXAJHAiAS+BAAFyCWWkAuASz0gBwCWalAeASzEoDwCWYlQaASzArraFQtZkUdUjJR90r8fdcpbeafKUOhFDY+cxKM19jCyu5TPa5sa2s/ilmY2UfDqGw85mVZr7GFnAgHKinrbPSpJ/fpHHMq6iqyzCXtIQacUzkVUVW1Gi4G1KRItJCxDWKCF80hMLOZ1aa4RqTKmprthLZ1gtDPYprV0W93WgThMLOZ1Za1Rpt9qp7jfSs0zjQMLu4Rm0ndcBSZPG4Io40FByY5+c0K02rxMqR0zhQm13hyXp6REzeggP1tHVWmvi6SlLVWSSFJuWbFCUqUZylrlQ8VxGEKlgRVlwmFqIorR0QSsKsNCu0ryJwCIRuwKy0w2lrXaA2hFbArDQArIObMQAugQMBcAkcCIBL4EAAXAIHAuCSfwEYCY3W03Ll/QAAAABJRU5ErkJggg==" alt="" />
配置文件中进行对IoC,AoP的配置
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
<section name="cachingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Caching.Configuration.CacheManagerSettings, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
<section name="unity" type="Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration" />
<section name="RedisConfig" type="Redis.Client.RedisConfigInfo, Redis.Client"/>
</configSections> <RedisConfig WriteServerList="127.0.0.1:6379" ReadServerList="127.0.0.1:6379" MaxWritePoolSize="" MaxReadPoolSize="" AutoStart="true" LocalCacheTime="" RecordeLog="false">
</RedisConfig> <cachingConfiguration defaultCacheManager="ByteartRetailCacheManager">
<cacheManagers>
<add name="ByteartRetailCacheManager" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" expirationPollFrequencyInSeconds="" maximumElementsInCacheBeforeScavenging="" numberToRemoveWhenScavenging="" backingStoreName="NullBackingStore" />
<!--
expirationPollFrequencyInSeconds:过期时间(seconds)
maximumElementsInCacheBeforeScavenging:缓冲中的最大元素数量
numberToRemoveWhenScavenging:一次移除的数量
-->
</cacheManagers>
<backingStores>
<add type="Microsoft.Practices.EnterpriseLibrary.Caching.BackingStoreImplementations.NullBackingStore, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="NullBackingStore" />
</backingStores>
</cachingConfiguration> <unity xmlns="http://schemas.microsoft.com/practices/2010/unity">
<sectionExtension type="Microsoft.Practices.Unity.InterceptionExtension.Configuration.InterceptionConfigurationExtension, Microsoft.Practices.Unity.Interception.Configuration" /> <container>
<!--泛型类型注入,数据仓储服务注入,可以由ef,linq,ado,memory,file,nosql等方式实现-->
<register type="IRepository.Core.IUnitOfWork,IRepository.Core" mapTo="NLayer_IoC_Demo.Entity.backgroundTestIoCEntities,NLayer_IoC_Demo.Entity" />
<!--使用redis作为持久化存储-->
<!--<register type="IRepository.Core.IRepository`1,IRepository.Core" mapTo="Redis.Data.Core.RedisRepository`1,Redis.Data.Core" />-->
<!--使用SQLSERVER作为持久化存储-->
<register type="IRepository.Core.IRepository`1,IRepository.Core" mapTo="NLayer_IoC_Demo.DATA.backgroundRepositoryBase`1,NLayer_IoC_Demo.DATA" />
<register type="IRepository.Core.IExtensionRepository`1,IRepository.Core" mapTo="NLayer_IoC_Demo.DATA.backgroundRepositoryBase`1,NLayer_IoC_Demo.DATA" /> <!-- AOP注入 -->
<extension type="Interception" />
<register type="NLayer_IoC_Demo.BLL.IUserService,NLayer_IoC_Demo.BLL" mapTo="NLayer_IoC_Demo.BLL.UserService,NLayer_IoC_Demo.BLL" >
<!--接口拦截-->
<interceptor type="InterfaceInterceptor" />
<!--缓存注入-->
<interceptionBehavior type="Project.UnityCaching.CachingBehavior,Project.UnityCaching"/>
</register> <register type="NLayer_IoC_Demo.BLL.OrderService,NLayer_IoC_Demo.BLL" >
<!--接口拦截-->
<interceptor type="VirtualMethodInterceptor" />
<!--虚方法注入,生成派生类进行拦截,让我们省去了建立接口的时间,不错的选择-->
<!--Transparent Proxy Interceptor -->
<!--它是注入所有的virutal method ,method,interface,但它的性能太差了-->
<!--缓存注入-->
<interceptionBehavior type="Project.UnityCaching.CachingBehavior,Project.UnityCaching"/>
</register> <register type="Project.InterceptionBehaviors.IHandle, Project.InterceptionBehaviors" mapTo="Project.InterceptionBehaviors.StandardHandle, Project.InterceptionBehaviors">
<!--接口拦截-->
<interceptor type="InterfaceInterceptor" />
<interceptionBehavior type="NLayer_IoC_Demo.BLL.AOP.LoggerBehavior,NLayer_IoC_Demo.BLL" />
</register> </container>
</unity> <connectionStrings>
<add name="backgroundTestIoCEntities" connectionString="metadata=res://*/background.csdl|res://*/background.ssdl|res://*/background.msl;provider=System.Data.SqlClient;provider connection string="data source=.;initial catalog=backgroundTestIoC;persist security info=True;user id=sa;password=zzl123;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" /> <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-NLayer_IoC_Demo-20141024091423;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-NLayer_IoC_Demo-20141024091423.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>
使用时的相关注意要点
- Unity组件中引入了服务定位器ServiceLocator的概念,它可以使我们不引用目标程序集,而自动在bin目录自动去定位。
- 对于Redis方式的缓存来说,进行缓存的实体类需要被声明为Serializable特性。
- 实现IoC,AoP时,只引用需要的程序集,而不用将所有Microsoft.Practices.Unity组件都引入,在程序进行编译时,这些需要的程序集会自动添加到UI项目的BIN目录。
- 方法拦截这块有三种,但TransparentProxyInterceptor由于性能太差,我们并不提倡使用,项目中我们主要使用VirtualMethodInterceptor对于虚方法的拦截和InterfaceInterceptor对于接口的拦截,两种方式各有好处,如果实现方式比较单一,可以直接使用虚方法注入,这样可以省去写接口的代码量。