编辑
2025-09-24
C#
00

目录

摘要
正文

摘要

在配制服务项目中增加一个Json配制读取类,继续继承IConfig接口。

是否可以简化服务注册?

正文

创建一个Json配置文件

JSON
{ "SmtpServer": "smtp.163.com", "UserName": "admin", "Password": "123456" }

在ConfigServices项目中添加一个JsonConfigProvider类

C#
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConfigServices { public class JsonConfigProvider : IConfig { private EmailConfig emailConfig; private string fileName = ""; public JsonConfigProvider() { } public JsonConfigProvider(string fileName) { this.fileName = fileName; emailConfig = JsonConvert.DeserializeObject<EmailConfig>(File.ReadAllText(this.fileName)); } public string Value(string key) { Type t = emailConfig.GetType(); var p= t.GetProperty(key).GetValue(emailConfig, null); return p.ToString(); } } public class EmailConfig { public string SmtpServer { get; set; } = ""; public string UserName { get; set; } = ""; public string Password { get; set; } = ""; } }

调用

C#
internal class Program { static void Main(string[] args) { ServiceCollection services=new ServiceCollection(); services.AddScoped(typeof(IConfig), x => new JsonConfigProvider("config.json")); //services.AddScoped<ILog, LogProvider>(); services.AddScoped<IEmail,EmailProvider>(); services.AddLogScoped();//我们通过静态扩展可以做成这样 using (var sp = services.BuildServiceProvider()) { var provider = sp.GetRequiredService<IEmail>(); provider.SendEmail("test", "body", "admin@admin.com"); } } }

其中LogServices中我们添加一个扩展类LogExtension

C#
using LogServices; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Microsoft.Extensions.DependencyInjection { public static class LogExtension { public static void AddLogScoped(this IServiceCollection serives) { serives.AddScoped<ILog,LogProvider>(); } } }

image.png

ConfigServices项目,同理可以添加一个静态方法

C#
namespace Microsoft.Extensions.DependencyInjection { public static class ConfigExtension { public static void AddConfigScope(this IServiceCollection serives,string fileName) { serives.AddScoped(typeof(IConfig),x=>new JsonConfigProvider(fileName)); } } }

调用时修改

C#
//services.AddScoped(typeof(IConfig), x => new JsonConfigProvider("config.json")); services.AddConfigScope("config.json");

本文作者:技术老小子

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!