• C# IOC注入示例


    主函数
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Unity;
    
    namespace IOCTest
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                IUnityContainer container = new UnityContainer();
                //container.RegisterType();
                container.RegisterType<Interface5, Class5>();
                //Class1 class1 = container.Resolve();
                //Class2 class2 = container.Resolve();
                //Class3 class3 = container.Resolve();
                //Class4 class4 = container.Resolve();
    
                Class5 class5 = container.Resolve<Class5>();
    
                Console.ReadKey();
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    常规注入
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace IOCTest
    {
        internal interface Interface1
        {
            void Show();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace IOCTest
    {
        internal class Class1 : Interface1
        {
            public Class1()
            {
                Console.WriteLine($"{this.GetType().Name}被构造");
            }
    
            public void Show()
            {
                Console.WriteLine($"{this.GetType().Name}--Show");
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace IOCTest
    {
        internal interface Interface2
        {
            void Show();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace IOCTest
    {
        internal class Class2 : Interface2
        {
            private Class1 _class1 = null;
            public Class2(Class1 class1)
            {
                _class1= class1;
                Console.WriteLine($"{this.GetType().Name}被构造");
            }
    
            public void Show()
            {
                Console.WriteLine($"{this.GetType().Name}--Show");
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    属性注入
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace IOCTest
    {
        internal interface Interface4
        {
            void Show();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Unity;
    
    namespace IOCTest
    {
        internal class Class4
        {
            [Dependency]
            public Class3 _class3 { get; set; }
    
            public Class4()
            {
                //Console.WriteLine($"{_class3.GetType().Name}被构造");
                Console.WriteLine($"{this.GetType().Name}被构造");
            }
    
            public void Show()
            {
                Console.WriteLine($"{this.GetType().Name}--Show");
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    方法注入
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace IOCTest
    {
        internal interface Interface5
        {
            void Show();
    
           // void Init(Class4 class4);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Unity;
    
    namespace IOCTest
    {
        internal class Class5:Interface5
        {
    
            private Class4 _class4 { get; set; }
    
            public Class5()
            {
                //Console.WriteLine($"{_class3.GetType().Name}被构造");
                Console.WriteLine($"{this.GetType().Name}被构造");
               
            }
    
            [InjectionMethod]
            public void Init(Class4 class4)
            {
                _class4 = class4;
            }
    
            public void Show()
            {
                Console.WriteLine($"{this.GetType().Name}--Show");
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
  • 相关阅读:
    CentOS上升级glibc2.17至glibc2.31
    Java通达信接口如何实现获取实时股票数据?
    s域和z域的频域响应分析
    webfunny埋点漏斗功能
    Rust有没有信号量机制,在缓存有数据的时候才允许等待的进程取数据?
    网易云音乐项目
    威联通NAS进阶玩法之使用Docker搭建个人博客教程
    获取本地上传文件信息
    剑指offer 丑数(dp、指针)
    ES6解构赋值及ES6的一些简写介绍
  • 原文地址:https://blog.csdn.net/weixin_44291381/article/details/134010617