概述
当面试官问到这个问题的时候,你可能会脱口而出,这不就是“属性注入、接口注入、构造函数注入”这三类吗?没有错,如果按照网上标准答案是这么回答;还有你实验过没有?但是这个回答从.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();
});
autofac注入生命周期:
1、瞬时 InstancePerDependency:每次获取的服务实例都不一样;
2、单例 SingleInstance:在整个容器中获取的服务实例都是同一个;
3、作用域 InstancePerLifetimeScope:相同作用域下获取到的服务实例相同;
4、作用域 InstancePerMatchingLifetimeScope(“作用域名称”):可以指定到某一个具体作用域;
5、每次请求 InstancePerRequest:不同的请求获取的服务实例不一样;
6、隐式关系类型的嵌套作用域 InstancePerOwned:可以使用每一个拥有实例的注册来依赖关系限定到拥有的实例。
大家可以根据自己的需求来使用。
3、在控制器里通过构造函数注入
这个跟.NET Core自带的注入一样,如下:
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);
}
//控制台将打印:注入类型:构造函数
这样就成功地实现了容器autofac的注入。
另外还有属性注入和方法注入,由于篇幅问题这里就不举例了,感兴趣的伙伴可以自己尝试一下。
结语
本文介绍了.NET Core依赖注入的方式的真伪,仅供参考。对于面试官的提问大家应该敢于发现其中的问题,并委婉的指出问题所在和问题的解决方案,这样更受面试官的青睐。希望本文给大家带来收获,对于本文欢迎大家留言讨论。
技术群:添加小编微信并备注进群
小编微信:mm1552923 公众号:dotNet编程大全
最后
以上就是明亮砖头为你收集整理的面试疑问:.NET Core依赖注入有三种方式是真的吗?的全部内容,希望文章能够帮你解决面试疑问:.NET Core依赖注入有三种方式是真的吗?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复