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

简介: 1:本篇基于如下的场景 a:主项目只和接口项目相关,如下: 也即,ConsoleApplication1只和IBiz和IDal相关。顺便说一下,为了演示注入,IDal要用到IBiz项目。 b:类结构如下: SampleClass1,SampleClass2,SampleClass3,都继承自IClass 其中SampleClass1构造器依赖注入ISomeBiz的一个实例, 其中SampleClass2属性依赖注入ISomeBiz的一个实例, 其中SampleClass3方法依赖注入ISomeBiz的一个实例。

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

Creative Commons License本文基于 Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 http://www.cnblogs.com/luminji(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。
目录
相关文章
|
4月前
|
Java 开发者 Spring
Spring中获取Bean对象的三种注入方式和两种注入方法
Spring中获取Bean对象的三种注入方式和两种注入方法
|
API
.net core工具组件系列之Autofac—— 第二篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入
本篇文章接前一篇,建议可以先看前篇文章,再看本文,会有更好的效果。前一篇跳转链接:https://www.cnblogs.com/weskynet/p/15046999.html
411 0
.net core工具组件系列之Autofac—— 第二篇:Autofac的3种依赖注入方式(构造函数注入、属性注入和方法注入),以及在过滤器里面实现依赖注入
|
4月前
|
XML Java 数据格式
怎么通过通过 p 名称空间配置 bean以及怎么去引用/注入其它 bean 对象--ref和怎么去引用/注入内部 bean 对象-内部 bean 对象
怎么通过通过 p 名称空间配置 bean以及怎么去引用/注入其它 bean 对象--ref和怎么去引用/注入内部 bean 对象-内部 bean 对象
35 0
|
9月前
|
图形学
Unity构造器注入+配置文件小实例
Unity构造器注入+配置文件小实例
|
8月前
|
XML Java 数据格式
案例03 基于xml配置的setter方法注入案例
通过setter方法方式来演示Spring容器在应用中是如何实现依赖注入的,实现StudentService调用StudentDao的saveStudent操作。
48 0
|
Java 关系型数据库 MySQL
如何使用@Value注解为bean的属性赋值呢
如何使用@Value注解为bean的属性赋值呢
注解与反射6得到Class类的几种方式
注解与反射6得到Class类的几种方式
|
Java Spring
spring学习42-属性注入中注入引用对象
spring学习42-属性注入中注入引用对象
62 0
spring学习42-属性注入中注入引用对象
|
Java Android开发 Spring
spring练习,使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出。
spring练习,使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出。
131 0
spring练习,使用Eclipse搭建的Spring开发环境,使用set注入方式为Bean对象注入属性值并打印输出。
|
Shell 数据安全/隐私保护 iOS开发
代码注入(11)
代码注入(11)
123 0