Unity TIP2: Configuration之构造器注入、属性注入、方法注入
1:本篇基于如下的场景
a:主项目只和接口项目相关,如下:
也即,ConsoleApplication1只和IBiz和IDal相关。顺便说一下,为了演示注入,IDal要用到IBiz项目。
b:类结构如下:
SampleClass1,SampleClass2,SampleClass3,都继承自IClass
其中SampleClass1构造器依赖注入ISomeBiz的一个实例,
其中SampleClass2属性依赖注入ISomeBiz的一个实例,
其中SampleClass3方法依赖注入ISomeBiz的一个实例。
c:用配置文件实现
2:主要的类
两个接口,一个是在IDal项目下的IClass:
public interface IClass { void ShowInfo(); }
一个是在IBiz项目下的ISomeBiz:
public interface ISomeBiz { string GetSomething(int a); }
ISomeBiz的实现SomeBiz为:
public class SomeBiz : ISomeBiz { public string GetSomething(int a) { return (a + a).ToString(); } }
SampleClass1的实现:
//构造器注入 public class SampleClass1 : IClass { private ISomeBiz _someBiz; public SampleClass1(int a, ISomeBiz someBiz) { _someBiz = someBiz; } public void ShowInfo() { Console.WriteLine("SampleClass1:" + _someBiz.GetSomething(1)); } }
SampleClass2的实现:
//属性注入 public class SampleClass2: IClass { public ISomeBiz SomeBiz { get; set; } public void ShowInfo() { if (SomeBiz != null) { Console.WriteLine("SampleClass2:" + SomeBiz.GetSomething(2)); } } }
SampleClass3的实现:
//方法注入 public class SampleClass3 : IClass { private ISomeBiz _someBiz; public void SetBiz(ISomeBiz someBiz) { _someBiz = someBiz; } public void ShowInfo() { Console.WriteLine("SampleClass3:" + _someBiz.GetSomething(3)); } }
3:配置文件
根据注释,配置文件应该是很容易看明白的。
4:主调用程序
using (IUnityContainer container = new UnityContainer()) { UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity"); section.Configure(container, "containerOne"); //无注入 IClass class0 = container.Resolve<IClass>("ConfigClass"); class0.ShowInfo(); //构造器注入 IClass class1 = container.Resolve<IClass>("ConfigClass1"); class1.ShowInfo(); //属性注入 IClass class2 = container.Resolve<IClass>("ConfigClass2"); class2.ShowInfo(); //方法注入 IClass class3 = container.Resolve<IClass>("ConfigClass3"); class3.ShowInfo(); }
5:特别说明
a:由于完全依赖注入,所以主项目对于两个接口项目的实现项目是不直接引用的,主应用程序运行所依赖的两个DLL:Dal.dll和Biz.dll必须在同一目录下,我们可以手动拷贝这两个DLL到输出目录下。或者你也可以设置两个项目的输出目录和主目录在一个目录下。
b:在实际使用过程中,可以轻松的配置文件,来替换我们的项目和注入类型;
6:输出
代码下载:ConsoleApplication20110808.rar
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架