Unity TIP2: Configuration之构造器注入、属性注入、方法注入

简介:

1:本篇基于如下的场景

a:主项目只和接口项目相关,如下:

image

也即,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:配置文件

根据注释,配置文件应该是很容易看明白的。

image

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:输出

image

代码下载:ConsoleApplication20110808.rar


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

相关文章
|
编解码 程序员 atlas
Unity 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具
图集只是当所有给低昂的纹理需要相同的着色器时采用的一种方法,如果一些纹理需要通过着色器应用独立的图形效果,它们就必须分离到自己的材质中,并在单独的组中打图集。
1474 0
Unity 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具
|
编解码 开发框架 Java
Unity 之 打包参数 -- Player面板属性详解
Unity Project Setting Player面板详解,看完这篇文章,彻底搞懂各个选项设置实际作用。
2057 0
Unity 之 打包参数 -- Player面板属性详解
|
11月前
|
图形学 容器
IOC容器Unity三种注入总结
IOC容器Unity三种注入总结
|
11月前
|
图形学
Unity构造器注入+配置文件小实例
Unity构造器注入+配置文件小实例
|
7月前
|
前端开发 C# 开发工具
Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】
Unity快手上手【熟悉unity编辑器,C#脚本控制组件一些属性之类的】
113 0
|
10月前
|
数据采集 算法 数据可视化
Unity实现camera数据注入RMP推送或轻量级RTSP服务模块
Unity实现camera数据注入RMP推送或轻量级RTSP服务模块
|
Go 图形学 Android开发
Unity 之 自动设置导入资源属性选项(模型、图片、声音)
在项目开发中会经常性的更换、导入很多资源,而且对于资源的设置容易出现设置错误或者忘记设置的情况,下面的Code是用untyi自带的AssetPostprocessor功能把导入的资源根据一定的规则自动设置对应的格式选项,使用的时候也很方便,只需要把脚本...
2610 0