我有一个位于API网关后面的API。在将请求传递到API之前,API网关会验证承载令牌。
我的API使用asp.net core 2.0本机身份验证和基于声明的授权框架。从JWT令牌获取声明的艰巨工作是由中间件进行的Microsoft.AspNetCore.Authentication.JwtBearer。
可以将该中间件配置为忽略令牌上的到期日期,并且还可以指定本地公共密钥,这样就不必联系令牌颁发机构来获取它,而是可以仅禁用令牌验证。令牌?
这将允许将未签名的令牌用于开发中的临时测试,并防止生产中的双重验证(网关和API)。
Unity允许您命名同一接口的不同实现,然后按名称解析它们:
var container = new UnityContainer();
// register
container.Register<IFish, OneFish>("One");
container.Register<IFish, TwoFish>("Two");
// resolve
var twoFish = container.Resolve("Two");
Run Code Online (Sandbox Code Playgroud)
现在假设我有一个依赖于IFish并实现ITank的类:
class Tank : ITank
{
public Tank(IFish fish) {...}
}
Run Code Online (Sandbox Code Playgroud)
我如何解决ITank并指定要获得哪些IFish实现?
这不起作用:
container.Register<ITank, Tank>();
var tank = container.Resolve<ITank>("One");
Run Code Online (Sandbox Code Playgroud)
这有效:
var fish = container.Resolve<IFish>("One");
var tank = container.Resolve<Tank>(new DependencyOverride(typeof(IFish), fish);
Run Code Online (Sandbox Code Playgroud)
但它只处理简单的情况(例如在这个例子中)而不是可能有许多名为"One"的实现的一般情况.我想要的是能够告诉Unity:
"当解析名为"One"的使用实现时,如果没有这样的实现,则寄存器将回退到未命名的实现"
是否有可以通过此行为插入Unity的自定义解析程序?
我疯了吗?我一直都能相信调试器吗?
事实证明,在与VS2015的调试会话期间,当我例如在立即窗口中更改变量的值时,该分配导致分配"垃圾"值.它每次都是相同的垃圾值,但完全错误.
我把它简化为最简单的控制台应用程序repro,以防万一你可能会认为我同意我对疯狂的自我评估,我还制作了一个截然不同的截图视频剪辑.
您是否也遇到此问题或者这是本地机器问题?
以下是一个驱动器链接:
PS:我正在运行Windows 10 Enterprise x64,VS2015 Enterprise,其中包含适用于OS和VS的所有当前更新.底层硬件是现代硬件,我在VS2013下没有遇到任何问题.
internal class Program
{
private static DateTime? _nullableDateTime;
private static void Main( string[] args )
{
// Use the debugger to step through this repro.
// * Not sure if it matters, but I started with F11 right from the start without any breakpoints.
// ==============================================================================================
// 1. Variable starts off with default of null
// The following statement will confirm that with an "empty" …Run Code Online (Sandbox Code Playgroud)