依赖注入之IConfiguration
2024-09-06 08:32:55
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
//下面这行就是注入,是AppSetting这个类与appsetting.json这个文件建立关系
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)
); } 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>();//这个<>其实就是,当代码读取到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[]);
string whse = ary[];
string fplxdm = ary[];
var obj = new SO(Pk_guid, whse, _Setting, _httpClientFactory.CreateClient(), _publisher);
s = await obj.SSTInvoice(fplxdm);
}
catch (Exception ex)
{
s = ex.Message;
}
return s;
}
}
最新文章
- ";Becoming Functional"; 阅读笔记+思维导图
- Java aes加密C#解密的取巧方法
- .NET设计模式(1):1.1 单例模式(Singleton Pattern)
- 【Spring】对象后期处理,BeanPostProcessor
- Unity中有两种Animation Clip
- Winform 中的KeyDown
- oracle 日期获取
- 浅谈datagrid详细操作单元格样式
- ASP.NET读取EXCEL文件的三种经典方法(转)
- 【Android Studio使用教程5】使用SDK Manager时, SDK下载更新不了的解决方案(eclipse 也适用)
- js高级技巧笔记(一)
- mybatis11 sqlMapConfig.xml文件说明
- iOS技术
- QT4和QT3的区别
- PHP学习笔记之数组篇
- php7安装php-redis扩展
- pycharm 配置svn
- C#通讯录——Windows Form Contact List
- 转载:Unity3D游戏对象消失enabled、Destroy与active的区别
- [PHP] 07 - Json, XML and MySQL
热门文章
- @ENABLEWEBSECURITY和@ENABLEWEBMVCSECURITY有什么区别?
- linux strace 命令
- Vue基础练习之Todo List
- linux一个例子驱动
- JS(JavaScript)的进一步了解8(更新中&#183;&#183;&#183;)
- HDU6383p1m2(二分)
- VRChat模型制作及上传总篇(201912)
- com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1680 >; 1024). You can change this value on the server by setting the max_allowed_packet&#39; variable.
- Kafka学习笔记4--Kafka消费者的客户端(PHP)开发
- Gif动图压缩java版