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
本文转自最课程陆敏技博客园博客,原文链接:http://www.cnblogs.com/luminji/archive/2011/08/08/2131004.html,如需转载请自行联系原作者