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 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具
图集只是当所有给低昂的纹理需要相同的着色器时采用的一种方法,如果一些纹理需要通过着色器应用独立的图形效果,它们就必须分离到自己的材质中,并在单独的组中打图集。
1733 0
Unity 之 图集属性详解和代码示例 -- 拓展一键自动打包图集工具
|
4月前
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
4月前
|
前端开发 图形学
Unity精华☀️UI和物体可见性的判断方法
Unity精华☀️UI和物体可见性的判断方法
|
4月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
84 0
|
4月前
|
C# 图形学 数据安全/隐私保护
Unity数据加密☀️反射的用法:变量、属性、方法、重载,反射在DLL中的使用方法
Unity数据加密☀️反射的用法:变量、属性、方法、重载,反射在DLL中的使用方法
|
4月前
|
存储 Java 图形学
UNITY性能优化☀️一、GC介绍与Unity内存管理方法
UNITY性能优化☀️一、GC介绍与Unity内存管理方法
|
6月前
|
图形学 开发者
【Unity小技巧】unity移动物体的探究——使用8个不同方法
【Unity小技巧】unity移动物体的探究——使用8个不同方法
204 1
|
图形学 容器
IOC容器Unity三种注入总结
IOC容器Unity三种注入总结
|
图形学
Unity构造器注入+配置文件小实例
Unity构造器注入+配置文件小实例