donet core 一大特点是,自带依赖注入。我们可以在startup或program中直接使用Add开头的扩展方法实现将服务注入。当然,微软也允许我们使用第三方依赖注入,比如Unity、AutoFacd等。由于我在搜索关于如何使用dotnet core中使用第三方依赖注入的文章,大多是dotnet core 3以前的代码,大家都在startup.cs中的进行配置。本文介绍如何在asp.net core 6.0中实现依赖注入。
dotnet core中使用autofac
在dotnetframework时代,我用过的第三方依赖注入工具是Unity。当我希望在dotnet core中使用第三方依赖注入时,微软官方将Unity,Autofac等都列为支持对象。当我搜索dotnet core中使用Unity时,出现的大多是支持netcore 3以前版本的。后来去查看Autofac的相关资料,也都是基于早期版本的dotnet core。于是自己动手改了改代码。
简单的注入
首先需要在项目中使用Nuget中引入包:Autofac.Extensions.DependencyInjection,Autofac.Extras.DynamicProxy。接下来需要创建演示用的服务(service),创建接口将服务暴露出来。为了演示方便,服务就写了一个简单的方法,在控制台中输出些内容。
1 | //定义接口 |
下面就是到了项目中添加Autofac作为依赖注入容器,来接管dotnet core自带的IoC容器。在Program.cs中修改默认代码如下。
1 | var builder = WebApplication.CreateBuilder(args); |
下面创建控制器,演示注入服务,通过构造函数方式将服务注入。
1 | public class HomeController : Controller |
运行项目,访问到Home控制器下的Index,观察控制台输出,能够正常将服务中Test方法内的内容输出出来。
利用反射注入整个命名空间
上面已经能够将我们的服务,通过autofac注入进来。如果正式开发项目中,需要创建大量服务,每个服务都需要手动写builder.Services.AddSingleton<IAutoFacDemo, AutoFacDemo>();
来注入的话,实在太麻烦了。接下来改造program.cs中代码,将整个命名空间的服务全部注入。
1 | //builder.Services.AddSingleton<IAutoFacDemo, AutoFacDemo>(); |
这里需要注意的是program中的这段代码,在3.X以前版本中的startup.cs中,可以直接写一个ConfigureContainer方法。
其中CommonAutofac类代码定义如下:
1 | public class CommonAutofac:Autofac.Module |
关于3.x版本以前的startup类中的方法,如何被执行的,可以看参考中[3]的介绍。
参考
【1】(https://docs.microsoft.com/zh-cn/dotnet/core/extensions/dependency-injection-guidelines)
【2】(https://blog.csdn.net/e_hilary/article/details/118925668)
【3】(https://www.cnblogs.com/wucy/p/13886728.html)
- 本文作者: 达文西
- 本文链接: https://edsiongithub.github.io/2022/05/20/37/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!