依赖注入之IConfiguration

it2026-09-28  6

public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddMvc(); //下面这行就是注入 services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));//这里是添加的,其余的都是新建项目带的 //AppSettings这个类是新增的,里面的字段,对应appsettings.json中的字段 //链接字符串的 var conn = Configuration.GetSection("ConnectionStrings");          string efconn = conn["acc_miniehub"]; //映射的实体类的ConnectionString 属性  OMSECData.Acc_OmsContext.ConnectionString = efconn;            services.AddDbContext<OMSECData.Acc_OmsContext>            (                options => options.UseSqlServer(efconn)            ); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseMvc(); } }

应用:这样就ok了。appsetting.json就是配置文件,把什么链接字符串了什么都是放在这里的。

 

 链接数据库:

 

用法和前面的一样,先声明再注入

 

IConfiguration 是用来加载配置值的,可以加载内存键值对、JSON或XML配置文件,我们通常用来加载缺省的appsettings.json 

1. 注入IConfiguration

执行到Startup的时候,IConfiguration已经被注入到services了,不需要我们额外添加注入的代码,缺省就是读取appsettings.json文件,你可以理解在Startup.cs里有隐藏的注入代码类似如下:

var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddEnvironmentVariables(); Configuration = builder.Build(); services.AddSingleton<IConfiguration>(Configuration);

 

SP.NET Core 包含了一个默认支持构造函数注入的简单内置容器(由 IServiceProvider 接口表示),并且 ASP.NET 使某些服务可以通过 DI 获取。

ASP.NET 的容器指的是它管理的类型为 services。在这篇文章的其余部分, services 是指由 ASP.NET Core 的 IoC 容器管理的类型。

你在应用程序 Startup 类的 ConfigureServices 方法中配置内置容器的服务

 

注册你自己的服务

你可以按照如下方式注册你自己的应用程序服务。第一个泛型类型表示将要从容器中请求的类型(通常是一个接口)。第二个泛型类型表示将由容器实例化并且用于完成这些请求的具体类型。

services.AddTransient<IEmailSender, AuthMessageSender>(); services.AddTransient<ISmsSender, AuthMessageSender>();

注解每个 services.Add<service> 调用添加(和可能配置)服务。 例如: services.AddMvc() 添加 MVC 需要的服务。

例如: 

services.AddTransient<MQ.ISOService, MQ.SOService>(); namespace ECBackend.MQ { interface ISOService { Task<int> PostOrderToWMS(string data); Task<int> SOConfirm(string data); } public class SOService : ISOService, ICapSubscribe { private readonly IOptions<AppSettings> _Setting; private readonly IHttpClientFactory _httpClientFactory; private readonly ICapPublisher _publisher; private readonly Acc_OmsContext _db; public SOService(IOptions<AppSettings> Setting,IHttpClientFactory httpClientFactory,ICapPublisher p,Acc_OmsContext db) { _Setting = Setting; _httpClientFactory = httpClientFactory; _db = db; _publisher = p; } [CapSubscribe("abc")] public async Task<string> GeneratePaperInvoice(string data) { string s = ""; try { var ary = data.Split(','); Guid Pk_guid = new Guid(ary[0]); string whse = ary[1]; string fplxdm = ary[2]; var obj = new SO(Pk_guid, whse, _Setting, _httpClientFactory.CreateClient(), _publisher); s = await obj.SSTInvoice(fplxdm); } catch (Exception ex) { s = ex.Message; } return s; } }

 

转载于:https://www.cnblogs.com/ZkbFighting/p/11248798.html

最新回复(0)