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 }
时间: 2024-10-16 15:38:09

IocFactory容器实体的相关文章

Java--基础语句

1.switch: 接受类型有byte short int char(适合具体数值,但数值不多的情况.) 当条件成立之后,执行case之后的语句,如果执行完没有遇到break:或者'}',则会继续往下执行能执行的语句,此时不会判断case的条件,直到 再次遇到break:或者'}'.2.循环语句: ①  while(条件表达式) { 循环体(执行语句): } ②do { 循环体(执行语句): } while(条件表达式); ③ for(初始化表达式;循环条件表达式;循环后的操作表达式) { 执行

JavaEE Hibernate初级概念

1.  Hibernate 是连接Java应用程序和关系数据库的中间件: 对JDBC API进行了封装.负责Java对象的持久化: 在三层软件架构中它位于持久层(数据访问层),封装了所有数据访问细节,使业务逻辑层可以专注于实现业务逻辑: 它是一种ORM映射工具,能够建立面向对象的域模型和关系数据模型之间的映射. 是轻量级JavaEE应用的持久层解决方案. 2.  Hibernate框架的作用: Hibernate主要用来实现Java对象和数据的表之间的映射,除此之外还提供数据查询和获取数据的方法

黑马程序员——数组

一.概念         同一种类型数据的集合.简单的来说就是一容器,用来装东西的. 使用数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素. 二.一维数组的格式 格式1:元素类型 [ ]数组名 = new 元素类型 [元素个数或数组长度] ; 如: int []  arr = new int [3];  也可以写成: int arr[] = new int[3]; 格式2:元素类型 []数组名 = new 元素类型 [ ]{元素1,元素2,…}; 如: int []  arr =

【Java学习笔记之五】java数组详解

数组 概念 同一种类型数据的集合.其实数组就是一个容器. 数组的好处 可以自动给数组中的元素从0开始编号,方便操作这些元素. 格式1: 元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; 示例:int[] arr = new int[5]; 格式2: 元素类型[] 数组名 = new 元素类型[]{元素,元素,……}; int[] arr = new int[]{3,5,1,7}; int[] arr = {3,5,1,7}; 如果需要存储大量的数据,例如如果需要读取100个数,

黑马程序员_毕向东_Java基础视频教程_Java基础学习知识点总结

黑马程序员_毕向东_Java基础视频教程 Java基础学习知识点总结 2016年01月06日  day01 一.基础知识:软件开发 1.什么是软件?软件:一系列按照特定顺序组织的计算机数据和指令的集合. 2.常见的软件:系统软件:如:DOS,Windows,Linux等.应用软件:如:扫雷,迅雷,QQ等. 3.什么是开发?制作软件. 二.基础知识:人机交互方式 4.软件的出现实现了人与计算机之间的更好的交互. 5.交互方式:图形化界面:这种方式简单直观,使用者易于接受,容易上手操作.命令行方式:

day04-函数与数组

1 函数 1.1  数的概述 发现不断进行加法运算,为了提高代码的复用性,就把该功能独立封装成一段独立的小程序,当下次需要执行加法运算的时候,就可以直接调用这个段小程序即可,那么这种封装形形式的具体表现形式则称作函数. 练习:把两个整数相加: public class FunctionDemo1{ public static void main(String[] args){ /* int a = 4+5; System.out.println("a="+a); int b = 3+9

Markdown 的 BUG丨CSDN

标题格式[#]定义的bug 按照正常格式还是出现的BUG ##数组的概念 > 同一种类型数据的集合,其实数组就是一个容器 --- ##一维数组 ###格式① > 元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; ####示例: >> int[] arr = new int{5]: > >与上一个属于同一类的还有下面的另外一种定义格式: > >>int arr[] = new int[5]; > >其中的new用来在容器中产

Tomcat 架构 (一)

在实践过程中,从WebSphere中实现一个EJB的容器以及从WebLogic中实现一个JMS几乎都是不可能的,然而来自Apache基金会的servlet容器Tomcat至少在理论上是可能做到的. 请注意,这里所说的“接口”也包含抽象类.规范的API可能会提供一个实现的模板,其中包括定义了一些抽象的基本类型的操作来供服务提供者去实现. 而服务提供者应提供这些接口和抽象类的具体实现.例如,在Tomcat中HttpSession接口被以org.apache.catalina.session.Stan

解析哈希表

网上看了很多有关的文章,感觉讲得都不够明了(原谅没读过书的我,这些基础知识都是看博客自学的).所以今天决定来讲讲哈希表 哈希表又称散列表,C#里最经典的就是Hashtable和Dictionary.特别是后面的Dictionary,大家都用得非常多.他们是以键值对的形式存储的,通过key就可以查到value,而且查询速度非常快.它内部是如何实现的呢?查询快又是为什么呢?它又有什么缺点吗?下面就来一一说明 首先,我们要开辟一个容器(数组)来存储要插入的元素,既然知道字典是以键值对的形式来存储,那我