在ASP.NET Core应用程序中,我有一个appsettings.json配置文件,它使用JSON数组来配置一组设置.
如何使用环境变量覆盖其中一个数组对象的设置?
背景
我使用serilog在ASP.NET核心应用,并使用Serilog.Settings.Configuration,允许它使用进行配置appsettings.json.
配置是这样的:
{
"Serilog": {
"Using": ["Serilog.Sinks.Literate"],
"MinimumLevel": "Debug",
"WriteTo": [
{ "Name": "File", "Args": { "path": "%TEMP%\\Logs\\serilog-configuration-sample.txt" } }
],
"Enrich": ["FromLogContext", "WithMachineName", "WithThreadId"],
"Properties": {
"Application": "Sample"
}
}
}
Run Code Online (Sandbox Code Playgroud)
部署时,我想覆盖一些设置,例如MinimumLevel,以及日志文件的路径.我首选的选项是在我部署到Azure应用服务时通过环境变量执行此操作,因此我将通过Azure管理门户使用应用程序设置(这些实现为环境变量).
我可以通过添加名称为的环境变量和应用程序名称来轻松设置MinimumLevel.Serilog:MinimumLevelSerilog:Properties:Application
使用数组指定设置的格式是什么?
我正在开发一个多租户解决方案,我想使用最新的ASP.NET Identity框架,特别是Entity Framework实现.
基本上我需要允许两个用户拥有相同的用户名,虽然它必须在租户中是唯一的,我也想利用外部登录,如Twitter,微软,Facebook和谷歌.
据我所知,该框架并未考虑多租户设计,尽管它似乎确实允许可扩展性.我宁愿尽可能多地使用现有组件,但目前我认为我将不得不放弃实体框架实现,并自己编写代码.
有没有其他人试过这个,他们有多少自己编码.
我有一个MVC4 Web API项目,我利用Mark Seemann的Hyprlinkr组件生成Uris链接资源.(客户 - >地址例如).
我已经遵循了Mark的Web依赖注入指南(适用于Ninject),我无法理解将IResourceLinker注入控制器应该做些什么.
按照Mark的指南,我的IHttpControllerActivator.Create create方法如下所示:
IHttpController IHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
{
var controller = (IHttpController) _kernel.GetService(controllerType);
request.RegisterForDispose(new Release(() => _kernel.Release(controller)));
return controller;
}
Run Code Online (Sandbox Code Playgroud)
正是在这种方法中,Hyprlinkr自述文件建议创建RouteLinker.不幸的是我不知道如何在Ninject注册这个.
我不能像下面那样绑定,因为这会导致多个绑定:
_kernel.Bind<IResourceLinker>()
.ToMethod(context => new RouteLinker(request))
.InRequestScope();
Run Code Online (Sandbox Code Playgroud)
我有这样的重新绑定:
_kernel.Rebind<IResourceLinker>()
.ToMethod(context => new RouteLinker(request))
.InRequestScope();
Run Code Online (Sandbox Code Playgroud)
但我担心更改ninject绑定图对每个请求都可能是一件坏事.
实现这一目标的最佳方法是什么?
我在这里使用重新绑定:
IHttpController IHttpControllerActivator.Create(HttpRequestMessage request, HttpControllerDescriptor controllerDescriptor, Type controllerType)
{
_kernel.Rebind<IResourceLinker>()
.ToMethod(context => new RouteLinker(request))
.InRequestScope();
var controller …Run Code Online (Sandbox Code Playgroud) 我正在使用构建一个ASP.NET应用程序docker build;当我在本地计算机上运行构建时,它会快速执行,因为我正在使用构建缓存。
Step 1/10 : FROM microsoft/aspnetcore-build:2.0.0 as identity-build
---> c5549d4c5716
Step 2/10 : ENV DOTNET_SKIP_FIRST_TIME_EXPERIENCE=true
---> Using cache
---> 060911817d8c
Step 3/10 : WORKDIR /publish
---> Using cache
---> 851e87c05c42
Run Code Online (Sandbox Code Playgroud)
我试图在AppVeyor CI上执行相同的操作,但是因为AppVeyor为每个构建都提供了干净的VM映像,所以没有缓存。
我尝试了从私有容器存储库中提取构建映像的尝试,但这似乎并没有“使映像缓存补水”,因此,没有缓存命中。
我已经创建了一个示例GitHub repo,并在AppVeyor中进行了相关的构建,我正在尝试进行构建。
我试图从私有容器存储库中还原构建映像,但这并未导致任何缓存命中。
我正在尝试通过使用docker build缓存实现两个目标。
首先,我只是试图重新构建构建缓存,然后从那里继续进行实验。
asp.net-core ×2
.net-core ×1
appveyor ×1
caching ×1
docker ×1
docker-build ×1
hyprlinkr ×1
multi-tenant ×1
ninject ×1
serilog ×1