五:.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天前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
7天前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
18 3
|
28天前
|
开发框架 NoSQL .NET
利用分布式锁在ASP.NET Core中实现防抖
【9月更文挑战第5天】在 ASP.NET Core 中,可通过分布式锁实现防抖功能,仅处理连续相同请求中的首个请求,其余请求返回 204 No Content,直至锁释放。具体步骤包括:安装分布式锁库如 `StackExchange.Redis`;创建分布式锁服务接口及其实现;构建防抖中间件;并在 `Startup.cs` 中注册相关服务和中间件。这一机制有效避免了短时间内重复操作的问题。
|
28天前
|
算法 Java 中间件
C#/.NET/.NET Core优质学习资料,干货收藏!
C#/.NET/.NET Core优质学习资料,干货收藏!
|
28天前
|
人工智能 开发框架 算法
C#/.NET/.NET Core技术前沿周刊 | 第 2 期(2024年8.19-8.25)
C#/.NET/.NET Core技术前沿周刊 | 第 2 期(2024年8.19-8.25)
|
28天前
|
传感器 应用服务中间件 Linux
C#/.NET/.NET Core技术前沿周刊 | 第 3 期(2024年8.26-8.31)
C#/.NET/.NET Core技术前沿周刊 | 第 3 期(2024年8.26-8.31)
|
28天前
|
人工智能 算法 C#
C#/.NET/.NET Core技术前沿周刊 | 第 1 期(2024年8.12-8.18)
C#/.NET/.NET Core技术前沿周刊 | 第 1 期(2024年8.12-8.18)
|
28天前
|
JSON 测试技术 C#
C#/.NET/.NET Core优秀项目框架推荐榜单
C#/.NET/.NET Core优秀项目框架推荐榜单
|
28天前
|
开发框架 .NET Java
C#/.NET/.NET Core自学入门指南
C#/.NET/.NET Core自学入门指南
|
28天前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
28 7
下一篇
无影云桌面