Autofac 注入仓储模式

这篇具有很好参考价值的文章主要介绍了Autofac 注入仓储模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、配置Autofac替换内置DI

  1. 安装Nuget包:Autofac,Autofac.Extensions.DependencyInjection

Autofac 注入仓储模式

  1. Program.cs中CreateHostBuilder方法后加上.UseServiceProviderFactory(new AutofacServiceProviderFactory()) ; 告诉程序要使用Autofac。

Autofac 注入仓储模式

  1. Startup.cs中增加方法ConfigureContainer(ContainerBuilder containerBuilder),实例注入的地方,配置完成。同时防止startup.cs代码过多,建一个Module把注入代码搬走,新建AutofacRegisterModule.cs类把ConfigureContainer的代码移过去。而在ConfigureContainer中调用即可。
    // 然后在startup类中新建ConfigureContainer方法,配置
    public void ConfigureContainer(ContainerBuilder builder)
    {
        // 直接用Autofac注册我们自定义的 
        builder.RegisterModule(new AutofacRegisterModule());
    }
  1. AutofacRegisterModule.cs类 注入仓储层和服务层
public class AutofacRegisterModule : Autofac.Module
    {
        /// <inheritdoc/>
        //重写Autofac管道Load方法,在这里注册注入
        protected override void Load(ContainerBuilder builder)
        {
            var basePath = AppContext.BaseDirectory;
            //如需加载实现的程序集,将dll拷贝到bin目录下即可,不用引用dll
            var tmp = Path.Combine(basePath, "XXX.XXX.IService.dll");
            var IServices = Assembly.LoadFrom(tmp);

            var Services = Assembly.LoadFrom(Path.Combine(basePath, "XXX.XXX.Service.dll"));

            var IRepository = Assembly.LoadFrom(Path.Combine(basePath, "XXX.XXX.IRepository.dll"));

            var Repository = Assembly.LoadFrom(Path.Combine(basePath, "XXX.XXX.Repository.dll"));



            //根据名称约定(服务层的接口和实现均以Service结尾),实现服务接口和服务实现的依赖

            builder.RegisterAssemblyTypes(IServices, Services)

            .Where(t => t.Name.EndsWith("Service") || t.Name.EndsWith("Work"))

            .AsImplementedInterfaces();



            //根据名称约定(数据访问层的接口和实现均以Repository结尾),实现数据访问接口和数据访问实现的依赖

            builder.RegisterAssemblyTypes(IRepository, Repository)

            .Where(t => t.Name.EndsWith("Repository") || t.Name.EndsWith("Work"))

            .AsImplementedInterfaces();
            //获取所有控制器类型并使用属性注入
            Type[] controllersTypeAssembly = typeof(Startup).Assembly.GetExportedTypes()
                .Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToArray();
            builder.RegisterTypes(controllersTypeAssembly).PropertiesAutowired();
        }
    }

二、构造函数注入

新建IUserService,类UserService,控制器UserController

public interface IUserService
    {
        public string GetUserName();
    }
 public class UserService
    {
        public string GetUserName()
        {
            return "张三";
        }
    }
 public class UserController : Controller
    {
        private readonly IUserService _userService;
        public UserController(IUserService userService)
        {
            _userService = userService;
        }
        public IActionResult Index()
        {
            string name = _userService.GetUserName();
            return Content(name);
        }
    }

在上面的ConfigureContainer方法把UserService注入进来,默认是瞬时注入
瞬时注入:containerBuilder.RegisterType().As().InstancePerDependency();;
单例注入:containerBuilder.RegisterType().As().SingleInstance();
生命周期注入: containerBuilder.RegisterType().As().InstancePerLifetimeScope();

/// <summary>
        /// Autofac注册服务的地方,Autofac会自动调用
        /// </summary>
        /// <param name="containerBuilder"></param>
        public void ConfigureContainer(ContainerBuilder containerBuilder)
        {
            //注册服务
            containerBuilder.RegisterType<UserService>().As<IUserService>();
        }

访问/User/Index,_userService成功注入,正确获取结果。
Autofac 注入仓储模式

演示项目结构:

Autofac 注入仓储模式文章来源地址https://www.toymoban.com/news/detail-446939.html

到了这里,关于Autofac 注入仓储模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .NET 6 整合 Autofac 依赖注入容器

    一行业务代码还没写,框架代码一大堆,不利于学习。 常看到java的学习资料或博客,标题一般为《SpringBoot 整合 XXX》,所以仿照着写了《.NET 6 整合 Autofac 依赖注入容器》这样一个标题。 以下是我自己的用法,可能不是最佳实践。 NuGet搜索并安装: Autofac Autofac.Extensions.Depe

    2023年04月26日
    浏览(49)
  • .Net6 使用Autofac进行依赖注入

    刚接触.net 6,记录一下在.net6上是怎么使用Autofac进行动态的依赖注入的 1、新建一个webapi项目,框架选择net 6 2、引用Nuget包---Autofac.Extensions.Dependency 3、在Program.cs上添加如下代码 4. 或 以及再startup.cs中添加ConfigureContainer方法    public void ConfigureContainer(ContainerBuilder builder)    

    2024年04月11日
    浏览(49)
  • .Net Framework使用Autofac实现依赖注入

    最近也是找了快2周的工作了,收到的面试邀请也就几个,然后有个面试题目是用asp.net mvc + Entityframework 做一个学生信息增删改查系统。因为题目要求了用Entityframework 也就是EF 那也就不上core了,web项目也是用Framework 4.8去做的。 本文的重点是IOC容器,在Framework 中是没有自带的

    2024年02月09日
    浏览(46)
  • .net中优秀依赖注入框架Autofac看一篇就够了

      Autofac 是一个功能丰富的 .NET 依赖注入容器,用于管理对象的生命周期、解决依赖关系以及进行属性注入。本文将详细讲解 Autofac 的使用方法,包括多种不同的注册方式,属性注入,以及如何使用多个  ContainerBuilder 来注册和合并组件。我们将提供详细的源代码示例来说明

    2024年02月05日
    浏览(48)
  • 【无标题】 Vue 路由库Router 【重点】 - 安装 - 基本使用 - 路由配置 - 路由模式 - 路由传递参数 - 路由内置对象 - 路由守卫

    Vue 路由库Router 【重点】 安装 基本使用 路由配置 路由模式 路由传递参数 路由内置对象 路由守卫 Vue的内置API 【掌握】 ref Vue.set Vue.nextTick Vue.filter Vue.component Vue.use Vue.directive 进行页面的跳转(相当于a标签),Vue是SPA单页面应用,他的页面跳转必须使用Vue-Router路由进行实现

    2024年02月06日
    浏览(48)
  • 【逗老师的无线电】ICOM IC-705终端模式Terminal Mode直连反射器配置-内置网关IP直连篇

    各位友台大家好呀,逗老师最近整了一台IC-705,最吸引人的莫过于这玩意可以IP直连反射器。下面简单介绍一下这个功能和其配置方法 终端模式Terminal Mode允许IC-705电台作为终端直接连接反射器,基于不同的连接方式,可以分为: 内置网关,IP直连反射器 USB连接外置网关 文章

    2024年02月03日
    浏览(45)
  • 一个.NET内置依赖注入的小型强化版

    .NET生态中有许多依赖注入容器。在大多数情况下,微软提供的内置容器在易用性和性能方面都非常优秀。外加ASP.NET Core默认使用内置容器,使用很方便。 但是笔者在使用中一直有一个头疼的问题:服务工厂无法提供请求的服务类型相关的信息。这在一般情况下并没有影响,

    2024年04月17日
    浏览(63)
  • .NET Core MongoDB数据仓储和工作单元模式封装

             上一章我们把系统所需要的MongoDB集合设计好了,这一章我们的主要任务是使用.NET Core应用程序连接MongoDB并且封装MongoDB数据仓储和工作单元模式,因为本章内容涵盖的有点多关于仓储和工作单元的使用就放到下一章节中讲解了。仓储模式(Repository )带来的好处是

    2023年04月09日
    浏览(39)
  • .NET Core MongoDB数据仓储和工作单元模式实操

    上一章节我们主要讲解了MongoDB数据仓储和工作单元模式的封装,这一章节主要讲的是MongoDB用户管理相关操作实操。如:获取所有用户信息、获取用户分页数据、通过用户ID获取对应用户信息、添加用户信息、事务添加用户信息、用户信息修改、用户信息删除等实战教程。 M

    2023年04月11日
    浏览(40)
  • .Net Core6.0 WebAPI项目框架搭建六:仓储模式+导入SqlSuagr

     完整框架项目源码地址:https://download.csdn.net/download/yigu4011/87788956?spm=1001.2014.3001.5503 仓储(Respository)是对数据库访问的一个封装 解决方案新建Respository文件夹,新建类库Web.Core.IRepository,Web.Core.Repository 解决方案新建Services文件夹,新建类库Web.Core.IServices,Web.Core.Services 在类库

    2024年01月18日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包