首页 > 其他 > 详细

一步步到IOC

时间:2019-09-20 19:14:14      阅读:91      评论:0      收藏:0      [点我收藏+]

一段代码

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();
    }
}

一步步到IOC

原文:https://www.cnblogs.com/sunven/p/11558861.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!