zoukankan      html  css  js  c++  java
  • 一步步到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();
        }
    }
    
  • 相关阅读:
    推荐系统学习--cb+cf 初见
    耳机的阻抗和灵敏度问题
    java中常见的几种Runtimeexception
    java泛型
    ubuntu安装opencv
    ubuntu12.04静态ip设置问题
    Graph Theory
    SQL简单上手教程
    C++ 构造函数、拷贝构造函数和赋值运算符重载
    C语言函数调用栈
  • 原文地址:https://www.cnblogs.com/sunven/p/11558861.html
Copyright © 2011-2022 走看看