五:.net core(.NET 6)使用Autofac实现依赖注入

简介: Autofac的简单使用:由于将来可能引用很多包,为了保持统一队形,我们再新建一个类库项目Wsk.Core.Package,当做包的引用集合:

Autofac的简单使用:

 

由于将来可能引用很多包,为了保持统一队形,我们再新建一个类库项目Wsk.Core.Package,当做包的引用集合:


1995789-20210530124820693-1871437543.png


删掉Class1,Wsk.CoreWsk.Core.Filter里面到包删掉,引用到Package里面,然后需要用到包的项目,都引用package这个类库项目。这样可以防止将来项目多了,版本环境如果不一致导致的版本冲突。更改以后的目录架构:

1995789-20210530124851202-144508992.png

添加依赖注入的两个关键包:Autofac.Extensions.DependencyInjection Autofac.Extras.DynamicProxy

 

 1995789-20210530124905182-52988022.png


然后在Program添加Autofac的支持:

1995789-20210530124951039-477200142.png


接着,新建一个类库项目,例如叫做 Wsk.Core.Service,然后新建一个类,叫做TestAutofac,以及对应的接口 ITestAutofac,以及一个方法叫做Test,用于做依赖注入实现的测试使用:

1995789-20210530125006977-1894952619.png

 1995789-20210530125027473-1262177266.png


接下来,在启动项目里面添加该依赖项目,然后在Startup里面的ConfigureServices方法里面,添加对ITestAutofac的单例注册实现:

1995789-20210530125043283-193889722.png

 

改写先前的WSK控制器,添加构造函数的依赖注入,以及修改或新增一个用于测试的方法,此处改写了HelloWorld方法,为了看出效果,只打印以上方法的输出内容:


1995789-20210530125056020-1013684058.png


测试一下效果:执行程序,并在swagger上面手动调用:

1995789-20210530125116203-484352930.png


显示预期内容,代表依赖注入成功。


接下来,使用注入整个类库来实现依赖注入,用于接口和类很多的情况下,为了方便,就可以把类库下面的所有接口全部暴露出来进行依赖注入。


在启动项目里面,新建一个文件夹,叫Common,在里面新建类AutofacRegister,并继承Autofac.Module ,在类下面重写 Load 方法:

1995789-20210530125138450-2136461033.png


startup里面,注释掉上面的实现方法,新建ConfigureContainer容器:

1995789-20210530125151738-1504197636.png

 

最后进行启动测试

1995789-20210530125201868-405530211.png


测试成功,完结撒花~~

 

最后总结一点东西:

AddSingleton(),只在首次请求会创建服务,后续所有请求都会使用该实例。

AddScoped(),不同的请求,实例不同。

AddTransient(),临时服务,每次请求都会创建一个新的服务实例

 

本篇章有关源码如下:

 

AutofacRegister


public class AutofacRegister: Autofac.Module
    {
        protected override void Load(ContainerBuilder container)
        {
            var assemblysServices = Assembly.Load("Wsk.Core.Service"); // 需要暴露接口所在的程序集
            container.RegisterAssemblyTypes(assemblysServices)
                .SingleInstance()  // 设置单例注入
               .AsImplementedInterfaces() // 把所有接口全暴露出来
               .EnableInterfaceInterceptors(); 
        }
    }


ConfigureContainer


public void ConfigureContainer(ContainerBuilder container)
        {
            container.RegisterModule(new AutofacRegister());
        }


TestAutofac 、ITestAutofac


 public class TestAutofac:ITestAutofac
    {
        public void Test()
        {
            Console.WriteLine("This is Autofac Test ……");
        }
    }


public interface ITestAutofac
    {
        void Test();
    }


目录
相关文章
|
6天前
|
数据可视化 网络协议 C#
C#/.NET/.NET Core优秀项目和框架2024年3月简报
公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项目和框架源码地址)。注意:排名不分先后,都是十分优秀的开源项目和框架,每周定期更新分享(欢迎关注公众号:追逐时光者,第一时间获取每周精选分享资讯🔔)。
|
30天前
|
开发框架 人工智能 .NET
C#/.NET/.NET Core拾遗补漏合集(持续更新)
C#/.NET/.NET Core拾遗补漏合集(持续更新)
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
59 0
|
2月前
|
开发框架 前端开发 .NET
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
为了便于大家查找,特将之前开发的.Net Core相关的五大案例整理成文,共计440页,32w字,免费提供给大家,文章底部有PDF下载链接。
32 1
福利来袭,.NET Core开发5大案例,30w字PDF文档大放送!!!
|
2月前
|
算法 BI API
C#/.NET/.NET Core优秀项目和框架2024年1月简报
C#/.NET/.NET Core优秀项目和框架2024年1月简报
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
38 0
|
25天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
24 0
|
25天前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
4 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
94 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0