• 一步步到IOC


    一段代码

    class Program
    {
        static void Main(string[] args)
        {
            var shop=new Shop();
            shop.Add();
            shop.Delete();
            Console.ReadKey();
        }
    }
    class Shop
    {
        readonly Log4NetServices _logServices;
    
        public Shop()
        {
            _logServices = new Log4NetServices();
        }
    
        public void Add()
        {
            _logServices.Write("增加商品");
        }
    
        public void Delete()
        {
            _logServices.Write("删除商品");
        }
    }
    

    问题

    • 依赖具体Log4NetServices,要换成FileLogServices就要改

    依赖

    依赖就是依赖抽象

    变形:

    readonly ILogServices _logServices;

    这样在实际使用中,不用管ILogServices的实现,由Shop的构造函数负责给具体实现

    问题

    • Shop本身也不知道是用Log4NetServices还是FileLogServices,但使用者肯定是知道的。

    注入

    注入就是将你需要的东西传给你,不用你自己new

    变形:

    class Program
    {
        static void Main(string[] args)
        {
            var shop=new Shop(new Log4NetServices());
            shop.Add();
            shop.Delete();
            shop=new Shop(new FileLogServices());
            shop.Add();
            shop.Delete();
            Console.ReadKey();
        }
    }
    class Shop
    {
        readonly ILogServices _logServices;
    
        public Shop(ILogServices logServices)
        {
            _logServices = logServices;
        }
    
        public void Add()
        {
            _logServices.Write("增加商品");
        }
    
        public void Delete()
        {
            _logServices.Write("删除商品");
        }
    }
    

    问题:

    • 需要的人多了,我一个个new?
    • 需要的种类多了,我一个个new?
    • 能不能把new的东西放一起,需要的人统一从里面拿。

    IOC

    dotnetcore 的ioc示例

    class Program
    {
        static void Main(string[] args)
        {
            var serviceCollection = new ServiceCollection();
            serviceCollection.AddSingleton<ILogServices, Log4NetServices>();
            var serviceProvider = serviceCollection.BuildServiceProvider();
            var logServices = serviceProvider.GetService<ILogServices>();
            var shop = new Shop(logServices);
            shop.Add();
            shop.Delete();
            Console.ReadKey();
        }
    }
    
  • 相关阅读:
    el表达式调用函数
    EL表达式
    mapReducer程序编写过程
    hadoop2.Xeclipse插件编译
    hadoop搭建与eclipse开发环境设置
    Sqoop-1.4.4工具import和export使用详解
    ZooKeeper典型应用场景一览
    hive原理和体系图解
    Linux中ssh免秘钥设置
    Annotation版本的HelloWorld
  • 原文地址:https://www.cnblogs.com/sunven/p/11558861.html
Copyright © 2020-2023  润新知