• 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

  • 相关阅读:
    Editplus中添加System.out.println()快捷键
    API使用
    项目有两个红点
    no console to display at this time
    startup.bat闪退问题
    filter的dispatcher节点
    【DP专题】——洛谷P2467地精部落
    输入年月日,计算这是该年中第几天
    输出N以内的完整数
    python中关于EOF的tips
  • 原文地址:https://www.cnblogs.com/luminji/p/2131004.html
Copyright © 2020-2023  润新知