当面试官问到这个问题的时候,你可能会脱口而出,这不就是“属性注入、接口注入、构造函数注入”这三类吗?没有错,如果按照网上标准答案是这么回答;还有你实验过没有?但是这个回答从.NET Core自带注入容器的角度上来说是错的,目前.NET Core自带容器只支持构造函数注入。这个答案来源应该是JAVA的注入方式,大家感兴趣可以找找,当然你也可以改造一下,让.NET Core自带依赖注入容器支持属性注入。另外第三方注入容器是支持的,比如autofac,他支持属性注入,构造函数注入等。.
扩展
下面我们看看第三方注入容器autofac的使用。
1、环境准备
首先新建一个.NET 6 的MVC项目,在项目中添加autofac的nuget包。
install-package Autofac
install-package Autofac.Extensions.DependencyInjection
然后在Program.cs文件中添加Autofac,替换到内置的DI,代码如下
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()) ;
2、使用autofac注入
在新建的这个解决方案中新建一个项目,项目里包含一个接口和一个实现的类,并创建一个方法用来测试调用情况。代码如下
public interface ITestIoc//接口
{
string GetIocType(string typename);
}
public class TestIoc : ITestIoc//实现接口的类
{ //测试方法:
public string GetIocType(string typename)
{
return typename;
}
}
在Program.cs文件注入这个类
builder.Host.ConfigureContainer<ContainerBuilder>(container =>
{ //这里使用单例注册
container.RegisterType<TestIoc>().As<ITestIoc>().SingleInstance();
});
private readonly ITestIoc testIoc;
public WeatherForecastController( ITestIoc testIoc)
{
this.testIoc = testIoc;
}
[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
var IocType= testIoc.GetIocType("构造函数");
Console.WriteLine("注入类型:"+ IocType);
}
//控制台将打印:注入类型:构造函数
结语
本文介绍了.NET Core依赖注入的方式的真伪,仅供参考。对于面试官的提问大家应该敢于发现其中的问题,并委婉的指出问题所在和问题的解决方案,这样更受面试官的青睐。希望本文给大家带来收获,对于本文欢迎大家留言讨论。