• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NET Core系列:依赖注入

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

  控制反转(Inversion of Control,IoC),是面向对象编程中的一种设计原则,用来降低代码之间的耦合度。

1.1 依赖倒置

  依赖原则:

  (1)高层次的模块不应该依赖于低层次的模块,它们都应该依赖于抽象。

  (2)抽象不应该依赖于具体,具体应该依赖于抽象。

1.2 依赖注入

  依赖注入:把依赖部分(代码不可控或者经常变动的耦合的部分)变成一个抽象的成员(类、抽象类或接口),然后根据具体所需要的实例去灵活的注入依赖,来达到控制反转的效果,从而实现代码解耦。

  依赖注入是控制反转的一种具体实现方式。

  C#常用的依赖注入方式:

  (1)通过构造器进行依赖注入

  (2)通过属性的访问器进行依赖注入

  (3)通过接口实现依赖注入

  (4)通过反射,特性也可以实现依赖注入

2. ASP.NET Core自带实现依赖注入

  依赖注入安装包:

Install-Package Microsoft.Extensions.DependencyInjection

  ASP.NET Core 提供了一个内置的服务容器 IServiceProvider,在 Startup.ConfigureServices 方法中配置依赖注入。

  ASP.NET Core 注册服务生存期:

  (1)AddTransient:暂时生存期,每次从服务容器进行请求时创建。

  (2)AddScoped:作用域生存期,每个客户端请求(连接)一次创建。

  (3)AddSingleton:单一实例生存期服务,在第一次请求时创建,每个后续请求都使用相同的实例。

  示例:

public interface ILogRepository
{
    int Insert(Log log);
}
ILogRepository
public class LogRepository : ILogRepository
{
    public int Insert(Log log)
    {
        using (var context = new PortalContext())
        {
            context.Logs.Add(new Log
            {
                UserName = log.UserName,
                Content = log.Content,
                CreateTime = DateTime.Now
            });

            return context.SaveChanges();
        }
    }
}
LogRepository

  Startup.cs

using Microsoft.Extensions.DependencyInjection;

public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<ILogRepository, LogRepository>();

    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

  LogController.cs

[Route("api/[controller]")]
[ApiController]
public class LogController : ControllerBase
{
    private readonly ILogRepository _logRepository;

    public LogController(ILogRepository logRepository)
    {
        _logRepository = logRepository;
    }

    [HttpPost]
    public void Post([FromBody] Log value)
    {
        _logRepository.Insert(value);
    }
}

3. ASP.NET Core使用Autofac实现依赖注入

  添加安装包:

Install-Package Autofac.Extensions.DependencyInjection

  Startup.cs:

using Autofac;
using Autofac.Extensions.DependencyInjection;

// 使用第三方容器,Startup.ConfigureServices 必须返回 IServiceProvider
public IServiceProvider ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    // Autofac
    var builder = new ContainerBuilder();
    builder.RegisterType<LogRepository>().As<ILogRepository>();
    builder.Populate(services);
    var container = builder.Build();
    return new AutofacServiceProvider(container);
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
ASP.NET程序中常用代码汇总(四)发布时间:2022-07-10
下一篇:
ScottMitchell的ASP.NET2.0数据教程之一:创建一个数据访问层发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap