zoukankan      html  css  js  c++  java
  • IocFactory容器实体

      1 /// <summary>
      2 /// 此类作用:容器实体,使用App_Data\unity.config文件配置,根据XML配置初始化IOC Created by ZhangQC 2016.08.08 
      3 /// </summary>
      4 public partial class IocFactory
      5 {
      6 /// <summary>
      7 /// 依赖注入容器
      8 /// </summary>
      9 private static IUnityContainer _container;
     10 
     11 /// <summary>
     12 /// 构造函数
     13 /// </summary>
     14 static IocFactory()
     15 {
     16 //初始化依赖注入容器
     17 InitContainer();
     18 }
     19 
     20 /// <summary>
     21 /// 初始化容器
     22 /// </summary>
     23 private static void InitContainer()
     24 {
     25 //实例化容器
     26 _container = new UnityContainer();
     27 
     28 _container.AddNewExtension<Interception>();
     29 
     30 // Unity只会调用标识了InjectionConstructor特性的构造函数,这样就很好的解决了多构造函数的情况下,Unity调用哪个构造函数。
     31 
     32 var unityConfig = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, @"App_Data\unity.config");
     33 if (!File.Exists(unityConfig))
     34 {
     35 return;
     36 }
     37 
     38 var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = unityConfig };
     39 var configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
     40 var unitySection = (UnityConfigurationSection)configuration.GetSection("unity");
     41 _container.LoadConfiguration(unitySection);
     42 }
     43 
     44 /// <summary>
     45 /// 容器对象
     46 /// </summary>
     47 [Obsolete("容器对象,放开之后,可以随便操作,但千万千万不要随便操作,挂了后果自负!")]
     48 public static IUnityContainer UnityContainer
     49 {
     50 get
     51 {
     52 return _container;
     53 }
     54 }
     55 
     56 /// <summary>
     57 /// 根据类型,返回注册的实例
     58 /// </summary>
     59 /// <typeparam name="T">各种实例</typeparam>
     60 /// <returns>各种实例</returns>
     61 [Obsolete("不建议使用,请使用Resolve", true)]
     62 public static T GetBizInstance<T>()
     63 {
     64 return Resolve<T>();
     65 }
     66 
     67 /// <summary>
     68 /// 根据类型,返回注册的实例
     69 /// </summary>
     70 /// <typeparam name="T">各种实例</typeparam>
     71 /// <returns>各种实例</returns>
     72 public static T Resolve<T>()
     73 {
     74 return _container.Resolve<T>();
     75 }
     76 
     77 /// <summary>
     78 /// 根据类型,返回注册的实例
     79 /// </summary>
     80 /// <typeparam name="T">各种实例</typeparam>
     81 /// <param name="name">注册的别名</param>
     82 /// <returns>各种实例</returns>
     83 public static T Resolve<T>(string name)
     84 {
     85 return _container.Resolve<T>(name);
     86 }
     87 
     88 /// <summary>
     89 /// 返回所有已经注册的实例
     90 /// </summary>
     91 /// <typeparam name="T">接口</typeparam>
     92 /// <param name="resolverOverrides"></param>
     93 /// <returns>实体</returns>
     94 public IEnumerable<T> ResolveAll<T>(params ResolverOverride[] resolverOverrides)
     95 {
     96 return _container.ResolveAll<T>(resolverOverrides);
     97 }
     98 
     99 /// <summary>
    100 /// 判断类型是否已注册
    101 /// </summary>
    102 /// <typeparam name="T">类型</typeparam>
    103 /// <returns>true已注册,false未注册</returns>
    104 public static bool IsRegistered<T>()
    105 {
    106 return _container.IsRegistered<T>();
    107 }
    108 
    109 /// <summary>
    110 /// 判断类型是否已注册
    111 /// </summary>
    112 /// <typeparam name="T">类型</typeparam>
    113 /// <returns>true已注册,false未注册</returns>
    114 public static bool IsRegistered<T>(string name)
    115 {
    116 return _container.IsRegistered<T>(name);
    117 }
    118 
    119 ///// <summary>
    120 ///// 注册指定子类至父类
    121 ///// </summary>
    122 ///// <typeparam name="TFrom">父类或接口</typeparam>
    123 ///// <typeparam name="TTo">子类或实现</typeparam>
    124 ///// <returns>各种实例</returns>
    125 //public static void RegisterType<TFrom, TTo>() where TTo : TFrom
    126 //{
    127 // _container.RegisterType<TFrom, TTo>();
    128 //}
    129 /// <summary>
    130 /// 注册指定子类至父类
    131 /// </summary>
    132 /// <typeparam name="TFrom">父类或接口</typeparam>
    133 /// <typeparam name="TTo">子类或实现</typeparam>
    134 /// <param name="name">注册的别名</param>
    135 /// <returns>各种实例</returns>
    136 public static void RegisterType<TFrom, TTo>(string name) where TTo : TFrom
    137 {
    138 _container.RegisterType<TFrom, TTo>(name);
    139 }
    140 
    141 /// <summary>
    142 /// Register a type mapping with the container.
    143 /// 
    144 /// </summary>
    145 /// 
    146 /// <remarks>
    147 /// 
    148 /// <para>
    149 /// This method is used to tell the container that when asked for type <typeparamref name="TFrom"/>,
    150 /// actually return an instance of type <typeparamref name="TTo"/>. This is very useful for
    151 /// getting instances of interfaces.
    152 /// 
    153 /// </para>
    154 /// 
    155 /// <para>
    156 /// This overload registers a default mapping and transient lifetime.
    157 /// 
    158 /// </para>
    159 /// 
    160 /// </remarks>
    161 /// <typeparam name="TFrom"><see cref="T:System.Type"/> that will be requested.</typeparam><typeparam name="TTo"><see cref="T:System.Type"/> that will actually be returned.</typeparam><param name="container">Container to configure.</param><param name="injectionMembers">Injection configuration objects.</param>
    162 /// <returns>
    163 /// The <see cref="T:Microsoft.Practices.Unity.UnityContainer"/> object that this method was called on (this in C#, Me in Visual Basic).
    164 /// </returns>
    165 public static void RegisterType<TFrom, TTo>(params InjectionMember[] injectionMembers) where TTo : TFrom
    166 {
    167 _container.RegisterType<TFrom, TTo>(injectionMembers);
    168 }
    169 
    170 /// <summary>
    171 /// 注册接口的实例
    172 /// </summary>
    173 /// <param name="name">别名</param>
    174 /// <param name="instance">实例,即new XX()</param>
    175 /// <typeparam name="TInterface">接口</typeparam>
    176 public void RegisterInstance<TInterface>(string name, TInterface instance)
    177 {
    178 _container.RegisterInstance<TInterface>(name, instance);
    179 }
    180 
    181 }
  • 相关阅读:
    VS 2010 制作 Windows Service 安装包
    Postback 之后保持浏览器滚动条的位置
    Stream之list转map及问题解决
    List.sort()排序功能
    The content of element type "resultMap"
    MyBatis 一对一,一对多,多对多
    Java Array、List、Set互相转化
    Java流(Stream)操作实例-筛选、映射、查找匹配
    JAVA系列笔记十八之nohup实现后台运行程序
    VSCode汇总
  • 原文地址:https://www.cnblogs.com/creater/p/6322063.html
Copyright © 2011-2022 走看看