当前位置: 移动技术网 > IT编程>开发语言>c# > 一步步到IOC

一步步到IOC

2019年09月21日  | 移动技术网IT编程  | 我要评论

一段代码

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网