我是靠谱客的博主 明亮砖头,最近开发中收集的这篇文章主要介绍面试疑问:.NET Core依赖注入有三种方式是真的吗?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

    当面试官问到这个问题的时候,你可能会脱口而出,这不就是“属性注入、接口注入、构造函数注入”这三类吗?没有错,如果按照网上标准答案是这么回答;还有你实验过没有?但是这个回答从.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依赖注入有三种方式是真的吗?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部