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

2023-10-19 19:27:55 浏览数 (2)

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

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

直接上代码吧:

代码语言:javascript复制
public interface IBar
{
    void MethodOne();

    void MethodTwo();
}
public class Bar : IBar
{
    public void MethodOne()
    {
        Console.WriteLine("MethOne....");
    }

    public void MethodTwo()
    {
        Console.WriteLine("MethTwo....");
    }
}

我们写个控制器类:

代码语言:javascript复制
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)

0 人点赞