欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

在控制台下玩玩dotnet core内置原生的DI

程序员文章站 2022-12-29 15:52:15
转载请注明出处:http://www.cnblogs.com/zhiyong-ITNote/ 在基于dotnet core的web开发中,我们会经常用到DI,那么如果单单使用dotnet core自身提供的一整套DI程序,该如何来实现呢?直接上代码吧: public interface IBar { ......

转载请注明出处:http://www.cnblogs.com/zhiyong-itnote/

在基于dotnet core的web开发中,我们会经常用到di,那么如果单单使用dotnet core自身提供的一整套di程序,该如何来实现呢?
直接上代码吧:

在控制台下玩玩dotnet core内置原生的DI
public interface ibar
{
    void methodone();

    void methodtwo();
}
public class bar : ibar
{
    public void methodone()
    {
        console.writeline("methone....");
    }

    public void methodtwo()
    {
        console.writeline("methtwo....");
    }
}
view code

我们写个控制器类:

public class miancontroller
{
    private iservicecollection _services;
    private iserviceprovider _serviceprovider;
    private ibar _bar;

    public miancontroller(iservicecollection services)
    {
        _services = services;
        _serviceprovider = _services.buildserviceprovider();
        _bar = _serviceprovider.getservice<ibar>();
    }

    public void actionone()
    {
        _bar.methodone();
    }

    public void actiontwo()
    {
        using (var scope = _serviceprovider.createscope())
        {
            var bar = scope.serviceprovider.getservice<ibar>();
            bar.methodtwo();
        }

    }

}
main函数:
static void main(string[] args)
{
    iservicecollection services = new servicecollection();
    services.addscoped<ibar, bar>();

    var controller = new miancontroller(services);
    controller.actionone();
    controller.actiontwo();

    console.read();
}

这里用到了正常的di方法也有少用的createscope方法,这两者都是用来获取指定服务的。具体可以参考  asp.net core 依赖注入实现全过程粗略剖析(3)

转载请注明出处:http://www.cnblogs.com/zhiyong-itnote/