1,配置文件 & lt;/configSections>
& lt; unity>
& lt; sectionExtension类型=癕icrosoft.Practices.Unity.InterceptionExtension.Configuration。InterceptionConfigurationExtension Unity.Interception.Configuration"/祝辞
& lt; containers>
& lt;容器名称=皔ydyoaSection"在
& lt;扩展类型=癐nterception"/祝辞
& lt;注册类型=癝tudy.Unity.Interface.IDoWork, Study.Unity"mapTo=?Study.Unity.Service.StudentDoWork Study.Unity"在
& lt;拦截器类型=癐nterfaceInterceptor"/祝辞
& lt; interceptionBehavior类型=癝tudy.Unity.Aop.ParameterCheckBehavior, Study.Unity"/祝辞
& lt; interceptionBehavior类型=癝tudy.Unity.Aop.CachingBehavior, Study.Unity"/祝辞
& lt; interceptionBehavior类型=癝tudy.Unity.Aop.ExpessionBehavior, Study.Unity"/祝辞
& lt; interceptionBehavior类型=癝tudy.Unity.Aop.LogBeforeBehavior, Study.Unity"/比;
& lt;/register>
& lt;/container>
& lt;容器名称=癿anagerSection"在
& lt;扩展类型=癐nterception"/祝辞
& lt;注册类型=癝tudy.Unity.Interface.IDoWork, Study.Unity"mapTo=?Study.Unity.Service.TeacherDoWork Study.Unity"在
& lt;拦截器类型=癐nterfaceInterceptor"/祝辞
& lt;/register>
& lt;/container>
& lt;/containers>
& lt;/unity>
& lt;/configuration>
2,初始化容器
说明:创建了一个枚举,用来对应配置文件中的两个节点,然后通过扩展方法获取到枚举值在配置文件中的节点名称,用来分别初始化不同的容器。
代码:
容器的工厂:
<代码> DIFactory公共类 { 私有静态只读的对象_SyncHelper=新对象(); 私有静态稳定Dictionary_UnityContainerDictionary=new Dictionary (); 公共静态IUnityContainer GetContainer (EnContainer EnContainer) { 如果(! _UnityContainerDictionary.ContainsKey (enContainer)) { 锁(_SyncHelper) { 如果(! _UnityContainerDictionary.ContainsKey (enContainer)) {//配置UnityContainer IUnityContainer容器=new UnityContainer (); ExeConfigurationFileMap fileMap=new ExeConfigurationFileMap (); fileMap。ExeConfigFilename=Path.Combine (AppDomain.CurrentDomain。BaseDirectory +“CfgFiles \ \ Unity.Config”); 配置配置=ConfigurationManager。OpenMappedExeConfiguration (fileMap ConfigurationUserLevel.None); UnityConfigurationSection configSection=(UnityConfigurationSection) configuration.GetSection (UnityConfigurationSection.SectionName); 字符串strSection=enContainer.Speccn (); configSection。配置(容器,strSection); _UnityContainerDictionary。添加(enContainer、集装箱); } } } 返回_UnityContainerDictionary [enContainer]; } }代码>
<代码>枚举:代码>公共enum EnContainer
<代码> { [Speccn (“yydyoaSection”)] YYDYOA=1, [Speccn (“managerSection”)] 经理=2 }代码>
<代码>特性:代码>
<代码> [AttributeUsage (AttributeTargets。AllowMultiple=false,继承=true)] 公共类SpeccnAttribute:属性 { 私人字符串Speccn{得到;设置;} 公共SpeccnAttribute(字符串speccn) { 这一点。Speccn=Speccn; } 公共字符串GetSpeccn () { 返回this.Speccn; } }代码>
<代码>扩展方法:代码>
<代码> EnumExtend公共静态类 { 公共静态字符串Speccn (Enum enContainer) { 型类型=enContainer.GetType (); FieldInfo字段=type.GetField (enContainer.ToString ()); 如果(field.IsDefined (typeof (SpeccnAttribute),真正的)) { SpeccnAttribute SpeccnAttribute=(SpeccnAttribute) field.GetCustomAttribute (typeof (SpeccnAttribute)); 返回speccnAttribute.GetSpeccn (); } 其他的 { 返回enContainer.ToString (); } } }代码>
3,接口和实现类的代码
接口:
<代码> IDoWork公共接口 { 字符串显示(字符串参数); }代码>
<代码>实现类:代码>
<代码>公共类StudentDoWork: IDoWork { 公共字符串显示(string参数) { Console.WriteLine”($ {this.GetType ()。名称}_DoWork之前”); Console.WriteLine”($ {this.GetType ()。名称}_DoWork后”); 返回nameof (StudentDoWork); } } 公开课TeacherDoWork: IDoWork { 公共字符串显示(string参数) { ”Console.WriteLine ($ {this.GetType () . name} _DoWork”); 返回nameof (TeacherDoWork); } }统一容器使用笔记