4.Autofac依赖注入初使用

autofac,依赖,注入,使用 · 浏览次数 : 309

小编点评

是的,可以运行。 文章说明,项目中可以使用Autofac依赖注入进行实现层和仓储层之间的依赖注入。但是,实现层和仓储层之间没有直接的依赖关系,所以可通过DLL程序集反射进行完全依赖注入。

正文

前面几篇文章只是初步搭建项目结构,那到底能否运行呢?(能是肯定的啦)

毕竟咱都NetCore了,所以依赖注入要搞起来。专业的解释我就不多说了,很多博客文章说的很详细(其实是我忘了那些术语怎么讲)。

按照我的理解来说的话就是:

省的你自己手动new了,假如你要更改接口,那不就要每个new的地方都改一下?

松耦合,可重用,易维护。简单举例来说:我通过构造函数注入的是接口类,不直接依赖实现,所以你可以很方便的去更换实现,这不就松耦合了吗?可重用这个看个人需求吧,因为解耦彼此都是模块化的,独立的,所以可重用,维护也较为简单,对整个项目影响较小。

仓储模式本身的目的就是为了解耦合,模块化。

回想一下项目之间的彼此依赖关系:

1 仓储接口层定义接口类,仓储实现层引用仓储接口层实现具体内容。主要用于和数据库打交道。

2.1 服务接口层引用仓储接口层,主要用于调用仓储层对数据库进行交互。

2.2 服务接口层定义接口类,服务实现层引用服务接口层实现具体实现。主要处理业务逻辑。

3.1 API程序层引用服务接口层,接收前端的请求,主要调用服务层进行业务逻辑处理。

基本上就是这么一个流程。他们彼此之间是有直接或间接的依赖关系的。这些可能无法完全解耦……但实现层并未进行直接依赖,所以耦合性体现在这里~

回到文章一开始所说的:Autofac依赖注入!因为实现层还没有实际的包含进项目,所以我的做法是通过DLL程序集反射进行整个实现层的注入。还可以多个实现层注入,但是这点我没操作过,所以暂时就不说了,只是告诉你们这个可以做到~


 这里我新建了一个类库:FastEasy.Common (公共类库) 

主要就是添加一些多个地方会用到的东西,但是即便你不用也不影响的一些东西,比如这个autofac,微软也有自带的依赖注入可以选择,再比如日志,这个可选择的更多了,Nlog,Log4,serilog等等。我将这些搞到公共类库中,可以根据自己选择来使用,个人觉得比较方便一些~

本身我之前写过Autofac的教程,所以可能接下来会复制一些之前的……

  1. 引入Autofac包:Autofac.Extensions.DependencyInjection  包含了Autofac。

  2. 在Common公共类库添加Autofac相关的类,例如上面的截图,一眼就看出来这个是autofac相关的东西~
  3. 打开新建的AutofaModule类,继承Autofac的Module,敲override,重新antofac的Load加载方法~我直接贴代码了,代码有注释~~~
            protected override void Load(ContainerBuilder builder)
            {
                //程序集目录
                var basePath = AppDomain.CurrentDomain.BaseDirectory;
    
                //仓储层服务层程序集路径
                var repositoryPath = Path.Combine(basePath, "FastEasy.Repository.dll");
                var servicePath = Path.Combine(basePath, "FastEasy.Service.dll");
    
                //加载程序集
                var repository = Assembly.LoadFrom(repositoryPath);
                var service = Assembly.LoadFrom(servicePath);
    
                //注入程序集
                builder.RegisterAssemblyTypes(repository, service)
                    .AsImplementedInterfaces();
            } 
  4. 修改程序默认的容器工厂。用Autofac覆盖它!Programs中配置
            builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());//覆盖默认的容器工厂。
            builder.Host.ConfigureContainer<ContainerBuilder>(builder =>
            {
                builder.RegisterModule(new AutofacModule());
            });
  5. 最后一步可做可不做的操作:前面说过了,实现层没有直接引用,所以生成解决方案的时候是不包含仓储实现层和服务实现层的。这里有两个操作。
    1. 第一个不用写代码,就是生成的时候把这两个dll丢到api下的bin文件夹里。
    2. 第二张需要稍微配置一下实现层的 =》属性>生成>输出>输出的基路径:    ..\FastEasyAPI\bin\

 到这里就结束了,需要注意的点就是,如果修改了实现层,需要单独生成一下实现层,将其生成到发布路径下。


 

 测试效果:我添加了一个测试用的Test控制器,包括其相应的仓储类服务类,并新增加减乘除接口。代码就不粘贴了,都是基础……就看一下接口的返回效果就好,看是否可以调用到仓储层返回结果

 

 掰掰~

 

与4.Autofac依赖注入初使用相似的内容:

4.Autofac依赖注入初使用

前面几篇文章只是初步搭建项目结构,那到底能否运行呢?(能是肯定的啦) 毕竟咱都NetCore了,所以依赖注入要搞起来。专业的解释我就不多说了,很多博客文章说的很详细(其实是我忘了那些术语怎么讲)。 按照我的理解来说的话就是: 省的你自己手动new了,假如你要更改接口,那不就要每个new的地方都改一下

拯救SQL Server数据库事务日志文件损坏的终极大招

拯救SQL Server数据库事务日志文件损坏的终极大招 在数据库的日常管理中,我们不可避免的会遇到服务器突然断电(没有进行电源冗余),服务器故障或者 SQL Server 服务突然停掉, 头大的是ldf事务日志文件也损毁了,SQL Server服务器起来之后,发现数据库处于"Recovery Pe

useCookie函数:管理SSR环境下的Cookie

摘要:本文详述了useCookie函数在服务器端渲染(SSR)中的应用,包括读写Cookie、配置选项如maxAge、expires、httpOnly、secure、domain、path及SameSite,并提供了encode、decode、default、watch等高级用法示例,以及如何在AP...

ComfyUI进阶篇:ControlNet核心节点

前言: ControlNet_aux库包含大量的图片预处理节点,功能丰富,适用于图像分割、边缘检测、姿势检测、深度图处理等多种预处理方式。掌握这些节点的使用是利用ControlNet的关键,本篇文章将帮助您理解和学会使用这些节点。 目录 一、安装方法 二、模型下载 三、Segmentor节点 四、L

Linux-Cgroup V2 初体验

本文主要记录 Linux Cgroup V2 版本基本使用操作,包括 cpu、memory 子系统演示。 1. 开启 Cgroup V2 版本检查 通过下面这条命令来查看当前系统使用的 Cgroups V1 还是 V2 stat -fc %T /sys/fs/cgroup/ 如果输出是cgroup2

Python潮流周刊的优惠券和精美电子书(EPUB、PDF、Markdown)

Python潮流周刊从 2023.05.13 连载至今,本周即将发布第 60 期,这意味着我们又要达成一个小小的里程碑啦! 每周坚持做分享,周复一周,这对自己的精力和意志是一项不小的挑战。于是,为了让自己获得一些仪式感,我给自己定了一个较为合理的时间目标,就是每 30 期周刊作为一季。 划分出“每一

.NET周刊【7月第1期 2024-07-07】

国内文章 学习.NET 8 MiniApis入门 https://www.cnblogs.com/hejiale010426/p/18280441 MiniApis是ASP.NET Core中的轻量级框架,用最少的代码和配置创建HTTP API。其特点包括简洁明了、性能卓越、灵活多变、易于学习使用,

论文阅读: 面向Planning的端到端智驾Planning-oriented Autonomous Driving

设计一个更优的、可理解的、面向最终目标的框架。基于这个面向Planning的思想,他们提出了 Unified Autonomous Driving (UniAD)方案,一种新的自动驾驶框架。这个方案从全局视角出发,让智驾的各个模块特征提取可以互相补充,各个任务之间可以通过统一的查询接口通信。在此基础...

设计模式学习(二)工厂模式——抽象工厂模式+注册表

目录前言使用简单工厂改进使用注册表改进参考文章 前言 在上一篇文章中我们提到了抽象工厂模式初版代码的一些缺点:①客户端违反开闭原则②提供方违反开闭原则。本文将针对这两点进行讨论 使用简单工厂改进 对于缺点①,我们可以使用简单工厂的思路来改进抽象工厂的初版代码。对于上一篇文章中的例子,我们去除Came

django基础

一、学期准备 安装Django pip install django==5.0.3 , 安装pycharm专业版 二、第一个django项目 命令行方式创建:打开终端,使用命令:django-admin startproject 【项目名称】即可创建。 django-admin startproje