欢迎光临
个人技术文档整理

.NET Core 依赖注入(DI)-常用注入方式(二)

如何使用内置IOC容器ServiceCollection

注:DI依赖注入:lServiceCollection  仅支持 构造函数注入(方法和属性注入 可以使用 Autofac 

第一种方式:

1、在Startup中的ConfigureServices方法中注册服务

            //1、最常用的注入方式,以接口形式暴露服务。 
            services.AddScoped<ITestService, TestService>();
            //services.AddScoped(typeof(ITestService), typeof(TestService));//方式2

            //2、自己注入自己,以实现形式暴露服务
            services.AddScoped<AService>();

            //3、构造函数 有参数 的注入
            //services.AddScoped<ITestService>(sp => { return new TestService("my_TestService"); });

2、在需要使用的控制器中,通过构造函数,定义服务的抽象类型,作为参数,在运行时,自动得到服务的具体;

        private readonly ITestService _ITestService;
        private readonly AService _AService;
        public HomeController(ITestService testService, AService aService)
        {
            _ITestService = testService;
            _AService = aService;
        }

3、调用服务内部的方法

        public IActionResult Index()
        {
            var name1 = _ITestService.GetServiceName();
            var name2 = _AService.GetServiceName();

            return View();
        }

 

第二种方式:

1、在Startup中的ConfigureServices方法中注册服务

        services.AddScoped<ITestService, TestService>();  
        services.AddScoped<AService>();

2、在需要使用的控制器中,通过构造画数,注入lServiceProvider

        private readonly IServiceProvider _ServiceProvider;
        public HomeController(IServiceProvider serviceProvider)
        {
            _ServiceProvider = serviceProvider;
        } 

3、通过 _ServiceProvider  获取到服务,然后通过服务实例调用服务内部的方法

        public IActionResult Index()
        {
            ITestService _TestService = _ServiceProvider.GetService<ITestService>();
            var name1 = _TestService.GetServiceName();

            AService _AService = (AService)_ServiceProvider.GetService(typeof(AService));
            var name2 = _AService.GetServiceName();

            return View();
        }

第三种方式

在注册服务后,视图中通过关键字 @inject 获取实例

@inject ITestService _TestService;
@inject AService _AService;
@{
    ViewData["Title"] = "Home Page";
}

<div class="text-center"> 
    <p>
       _TestService的名称= @_TestService.GetServiceName() 
    </p>
    <p>
     _AService的名称=   @_AService.GetServiceName()
    </p>
</div>


 

赞(1)