ASP.NET Core 在 JSON 文件中配置依赖注入
2016-10-06 11:10
941 查看
前言
在上一篇文章中写了如何在MVC中配置全局路由前缀,今天给大家介绍一下如何在在 json 文件中配置依赖注入。在以前的 ASP.NET 4+ (MVC,Web Api,Owin,SingalR等)时候,都是提供了专有的接口以供使用第三方的依赖注入组件,比如我们常用的会使用 Autofac、Untiy、String.Net 等,这些第三放依赖注入组件基本上都提供了一套配置注入或者配置生命周期的方式,除了直接配置到类里面之外,还提供了要么使用 xml 文件,要么使用 json 等,那么在新的 ASP.NET Core 中微软已经默认的给我们提供了一个依赖注入的功能,我们就不再需要借助于第三方组件来实现依赖注入了,但是有时候我们想在配置文件中来配置依赖注入,微软本身的 DI 组件并没有给我们提供一个可供配置的文件,那么我们就需要自己来实现这个配置项的功能。个人觉得其主要使用场景是一些在编译时不能确定实现的,需要动态修改实现的地方。
下面就来看看应该如何来做这件事情吧。
Getting Started
首先,在应用程序中我们创建一个接口,以供 DI使用:public interface IFoo { string GetInputString(string input); }
然后,添加一个
IFoo接口的实现 Foo
public class Foo : IFoo { public string GetInputString(string input) { return $"输入的字符串为:{ input }"; } }
接下来,我们需要把以上的
IFoo接口和它的实现添加到 Startup.cs 文件中的
ConfigureServices方法中,ConfigureServices 主要是用来配置依赖注入服务的。然后通过该方法提供的
ISerciceCollection接口参数注入 Services。
public void ConfigureServices(IServiceCollection services) { services.Add(new ServiceDescriptor(serviceType: typeof(IFoo), implementationType: typeof(Foo), lifetime: ServiceLifetime.Transient)); }
这里,我们使用到了 IServiceCollection 里面的 Add 方法,添加一个生命周期为瞬态的
IFoo的实现。瞬态就是说在每次请求的时候都将创建一个
Foo的实例。
以上是默认微软为我们提供的添加依赖注入的方法,下面我们来看一下怎么来改造成我们需要的使用 json 文件的方式。
使用 json 文件配置 DI
当我们使用json文件配置依赖注入的时候,可以选择新建一个json文件,也可以直接使用 appsettings.json 文件。现在我们就直接在 appsettings.json 文件中添加关于DI的配置了。appsettings.json
"Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Debug", "System": "Information", "Microsoft": "Information" } }, "DIServices": [ { "serviceType": "[namesapce].IFoo", "implementationType": "[namesapce].Foo", "lifetime": "Transient" } ] }
首先,添加一个名为 “DIServices” 的数组节点,数组中包含一个或多个配置service的对象,
serviceType代表服务接口的类型,
implementationType接口的实现,
lifetime初始化实例的生命周期。
注意:配置文件中的类型必须为全名称,即包含命名空间。
接下来,添加一个和Json文件配置项相对应的一个service类,这里我们需要使用 Newtonsoft 这个json库。
using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; using Newtonsoft.Json.Converters; public class Service { public string ServiceType { get; set; } public string ImplementationType { get;set; } [JsonConverter(typeof(StringEnumConverter))] public ServiceLifetime Lifetime { get; set; } }
然后需要改造一下ConfigureServices,在
ConfigureServices中读取配置的 json文件即可。
public void ConfigureServices(IServiceCollection services) { //services.Add(new ServiceDescriptor(serviceType: typeof(IFoo), // implementationType: typeof(Foo), // lifetime: ServiceLifetime.Transient)); var jsonServices = JObject.Parse(File.ReadAllText("appSettings.json"))["DIServices"]; var requiredServices = JsonConvert.DeserializeObject<List<Service>>(jsonServices.ToString()); foreach (var service in requiredServices) { services.Add(new ServiceDescriptor(serviceType: Type.GetType(service.ServiceType), implementationType: Type.GetType(service.ImplementationType), lifetime: service.Lifetime)); } }
然后我们测试一下是否是可用的。
测试
打开 HomeController.cs ,添加注入项:public class HomeController : Controller { private readonly IFoo _foo; public HomeController(IFoo foo) { _foo = foo; } public IActionResult About() { ViewData["Message"] = _foo.GetInputString("Your application description page."); return View(); } }
在
HomeController的构造函数添加IFoo接口,然后在 About 的Action中使用。
运行程序,打开页面,点击 About标签

总结
以上即为在 ASP.NET Core 中配置依赖注入到json文件中,这只是一个简单的实例,不要用在生产环境中。在实际的项目中你还需要处理关于读取配置异常情况,服务是否存在的异常情况,生命周期等等这些问题。本文地址:http://www.cnblogs.com/savorboard/p/dotnetcore-json-config-di.html
作者博客:Savorboard
欢迎转载,请在明显位置给出出处及链接
相关文章推荐
- 详解ASP.NET Core 在 JSON 文件中配置依赖注入
- ASP.NET Core 配置文件(无处不在的依赖注入)
- ADO.NET .net core2.0添加json文件并转化成类注入控制器使用 简单了解 iTextSharp实现HTML to PDF ASP.NET MVC 中 Autofac依赖注入DI 控制反转IOC 了解一下 C# AutoMapper 了解一下
- 【无私分享:ASP.NET CORE 项目实战(第六章)】读取配置文件(一) appsettings.json
- ASP.NET core Web中使用appsettings.json配置文件的方法
- IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题
- 菜鸟入门【ASP.NET Core】5:命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options
- 【ASP.NET Core快速入门】(五)命令行配置、Json文件配置、Bind读取配置到C#实例、在Core Mvc中使用Options
- 【无私分享:ASP.NET CORE 项目实战(第六章)】读取配置文件(一) appsettings.json
- ASP.NET CORE入门之读取Json配置文件
- ASP.NET CORE入门之读取Json配置文件
- ASP.NET Core 中的依赖注入 [共7篇]
- ASP.NET Core中的依赖注入(3): 服务的注册与提供
- ASP.NET Core依赖注入解读&使用Autofac替代实现
- ASP.NET Core开发-读取配置文件Configuration
- .Net Core Linux centos7行—.net core json 配置文件
- ASP.NET Core依赖注入解读&使用Autofac替代实现
- ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【总体设计 】
- ASP.NET Core中的依赖注入(5): ServiceProvider实现揭秘 【解读ServiceCallSite 】
- 【无私分享:ASP.NET CORE 项目实战(第二章)】添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)