宝哥软件园

详细说明ASP.NET核心在JSON文件中配置依赖注入

编辑:宝哥软件园 来源:互联网 时间:2021-09-06

在上一篇文章中,我写了如何在MVC中配置全局路由前缀。今天,我将介绍如何在json文件中配置依赖注入。

在之前的ASP.NET 4(MVC、Web Api、Owin、SingalR等。),为使用第三方依赖注入组件提供了专有接口,如Autofac、Untiy、String.Net等。这些第三方依赖注入组件基本上提供了一套配置注入或配置生命周期方法。除了直接配置到类中之外,它还提供了xml文件或者json,所以微软在新的ASP.NET Core中默认为我们提供了依赖注入功能,所以我们不再需要使用第三方组件来实现依赖注入,但是有时候我们要在配置文件中配置依赖注入,而微软自己的DI组件并没有为我们提供可配置的文件,所以我们需要自己实现这个配置项的功能。个人认为主要的使用场景是编译时无法确定,需要动态修改的场景。

让我们看看如何做到这一点。

入门指南

首先,在应用程序中,我们创建一个接口供DI使用:

公共接口IFoo{ string GetInputString(字符串输入);}然后,添加IFoo接口的实现Foo

public class foo : ifo { public string get input string(字符串输入){return $ '输入字符串为:{ input } ';}}接下来,我们需要将上面的IFoo接口及其实现添加到Startup.cs文件中的ConfigureServices方法中,该方法主要用于配置依赖注入服务。然后通过该方法提供的ISerciceCollection接口参数注入服务。

public void ConfigureServices(IServiceCollection services){ services。添加(新的服务描述符(serviceType: typeof(IFoo),实现类型: typeof(Foo),lifetime: ServiceLifetime。瞬态));}在这里,我们使用IServiceCollection中的Add方法来添加一个具有短暂生命周期的IFoo实现。瞬态意味着每次请求时都会创建一个Foo实例。

以上是微软提供的添加依赖注入的默认方法。让我们看看如何将其转换成我们需要使用json文件的方式。

使用json文件配置DI

当我们使用json文件配置依赖注入时,我们可以选择创建一个新的json文件,或者直接使用appsettings.json文件。现在我们将直接在appsettings.json文件中添加关于DI的配置。

appsettings.json

日志记录' : { ' IncludeScopes ' : false,'日志级别' : { 'Default': 'Debug ',' System': 'Information ',' Microsoft': 'Information' },' DIServices ' :[{ ' service type ' : '[namespace]。IFoo ',' implementation type ' : '[namespace]。Foo ',Lifetime': 'Transient'} ]}首先,添加一个名为“DIServices”的数组节点,其中包含一个或多个用于配置服务的对象。serviceType表示服务接口的类型、implementation接口的实现以及初始化实例生命周期的生存期。

注意:配置文件中的类型必须是全名,即包括名称空间。

接下来,添加一个对应于Json文件配置项的服务类。这里,我们需要使用Newtonsoft作为json库。

使用微软。扩展。依赖注射;使用Newtonsoft。Json使用Newtonsoft。转换器;公共类Service { public string ServiCeType { get;设置;}公共字符串ImplementationType { get设置;}[JsonConverter(type of(stringnumconverter))]public service Lifetime Lifetime { get;设置;}}然后,需要修改ConfigureServices,读取ConfigureServices中配置的json文件。

public void ConfigureServices(IServiceCollection services){//services .添加(新的服务描述符(服务类型:类型(IFoo))//实现类型: typeof(Foo),//lifetime : ServiCe Lifety .瞬态));var jsonServices=JObject .解析(文件读取所有文本(' appsettings。JSON’)[“DIServices”];var requiredServices=JsonConvert .反序列化对象列表服务. ToString());foreach(所需服务中的定义变量服务){服务.添加新的服务描述符(服务类型:类型. GetType(服务。服务类型),实现类型:类型. GetType(服务实现类型),生命周期:服务。寿命);}}然后我们测试一下是否是可用的。

测试

打开HomeController.cs添加注入项:

公共类家庭控制器:控制器{私有只读IFoo _ foo public HomeController(IFoo foo){ _ foo=foo;}公共IActionResult About(){查看数据[' Message ']=_ foo .GetInputString(')您的应用程序描述页');返回视图();}}在家庭控制器的构造函数添加IFoo接口,然后在关于的行动中使用。

运行程序,打开页面,点击关于标签

总结

以上即为在ASP。网核心中配置依赖注入到json文件中,这只是一个简单的实例,不要用在生产环境中。在实际的项目中你还需要处理关于读取配置异常情况,服务是否存在的异常情况,生命周期等等这些问题。

更多资讯
游戏推荐
更多+