前言

在上一篇文章中写了如何在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文件中,这只是一个简单的实例,不要用在生产环境中。在实际的项目中你还需要处理关于读取配置异常情况,服务是否存在的异常情况,生命周期等等这些问题。
# asp.net
# core
# json
# .net
# 依赖注入
# core依赖注入json
# ASP.NET Core配置文件的获取和设置
# ASP.NET CORE读取json格式配置文件
# ASP.NET Core读取配置文件
# ASP.NET Core应用程序配置文件AppSetting.json
# ASP.NET Core根据环境变量支持多个 appsettings.json配置文件
# ASP.NET Core中修改配置文件后自动加载新配置的方法详解
# Asp.net Core与类库读取配置文件信息的方法
# 如何在ASP.NET Core类库项目中读取配置文件详解
# ASP.NET core Web中使用appsettings.json配置文件的方法
# 如何使用ASP.NET Core 配置文件
# 微软
# 给我们
# 第三方
# 来实现
# 创建一个
# 配置文件
# 以供
# 都是
# 是一个
# 多个
# 给大家
# 可以直接
# 这只
# 写了
# 还需要
# 都将
# 可供
# 当我们
# 来做
# 上都
相关文章:
深圳网站制作的公司有哪些,dido官方网站?
内网网站制作软件,内网的网站如何发布到外网?
正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?
建站之星代理平台如何选择最佳方案?
如何通过万网虚拟主机快速搭建网站?
定制建站流程解析:需求评估与SEO优化功能开发指南
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
中山网站推广排名,中山信息港登录入口?
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
如何在香港服务器上快速搭建免备案网站?
如何在万网ECS上快速搭建专属网站?
深圳网站制作案例,网页的相关名词有哪些?
韩国服务器如何优化跨境访问实现高效连接?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
广德云建站网站建设方案与建站流程优化指南
建站主机选择指南:服务器配置与SEO优化实战技巧
如何快速生成可下载的建站源码工具?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
招贴海报怎么做,什么是海报招贴?
如何自定义建站之星模板颜色并下载新样式?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
,柠檬视频怎样兑换vip?
如何通过IIS搭建网站并配置访问权限?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
建站之星后台密码如何安全设置与找回?
公众号网站制作网页,微信公众号怎么制作?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
北京营销型网站制作公司,可以用python做一个营销推广网站吗?
建站之星如何修改网站生成路径?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
定制建站策划方案_专业建站与网站建设方案一站式指南
建站主机核心功能解析:服务器选择与网站搭建流程指南
建站DNS解析失败?如何正确配置域名服务器?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
如何访问已购建站主机并解决登录问题?
济南网站制作的价格,历城一职专官方网站?
如何用免费手机建站系统零基础打造专业网站?
如何用美橙互联一键搭建多站合一网站?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
实惠建站价格推荐:2025年高性价比自助建站套餐解析
香港服务器如何优化才能显著提升网站加载速度?
如何高效完成自助建站业务培训?
威客平台建站流程解析:高效搭建教程与设计优化方案
北京网站制作网页,网站升级改版需要多久?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
如何用花生壳三步快速搭建专属网站?
如何快速启动建站代理加盟业务?
制作农业网站的软件,比较好的农业网站推荐一下?
*请认真填写需求信息,我们会在24小时内与您取得联系。