1:本篇基于如下的场景

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

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

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

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

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

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

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

代码下载:ConsoleApplication20110808.rar


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

相关文章:

  • 2021-11-30
  • 2021-10-06
  • 2021-10-27
  • 2022-12-23
  • 2021-06-17
  • 2021-05-12
  • 2022-12-23
猜你喜欢
  • 2021-09-29
  • 2022-12-23
  • 2021-11-25
  • 2022-12-23
  • 2022-02-18
  • 2021-12-18
相关资源
相似解决方案