我目前使用的是最新的Unity容器,我使用的是asp.net Core2.2,我使用的是应用程序洞察力。因此,我已经在我的web应用程序中配置了DI,以使用unity而不是核心中的开箱即用的DI提供程序。我还使用应用程序洞察和使用IWebHostBuilder.UseApplicationInsights扩展来为我的应用程序启动AI。
考虑到所有这些,我有一段代码,它的构造函数接受IHttpContextAccessor,这样我就可以访问HttpContext了。然后,我有了另一个小应用程序,我试图重用这个功能,来自IHttpContextAccessor的HttpContext是空的。通过一系列猜测、测试和修改,我发现IWebHostBuilder.UseApplicationInsights似乎初始化了IHttpContextAccessor上的请求属性(HttpContext)。如果我注释掉那个AI扩展,我会得到null;取消注释,它起作用了。
我已经开始仔细查看AI代码,以找出它们到底在做什么,但老实说,考虑到所有的依赖和管道以及所有这些,这是一项相当令人生畏的任务。所有的帮助都将是令人难以置信的。
发布于 2019-04-23 12:23:25
使用AddHttpContextAccessor扩展将其添加到DI中。由于性能影响,默认情况下不添加HttpContextAccessor。
services.AddHttpContextAccessor();发布于 2019-04-23 20:11:46
经过一番努力,希望这篇文章能启发我对AI ask的理解,我发现我不需要复制AI机制,如果真的有的话。
最初,我通过视图(Razor)中的代码访问IHttpContextAccessor。我有一个抽象的工厂模式,我使用它通过Unity来实例化IHttpContextAccessor (这个模式来自于我的.Net框架工作)。一旦我将代码移回控制器,并使用适当的.net核心DI通过构造函数获得依赖项,一切就开始工作了。
一定有什么地方我遗漏了,但我让代码正常工作,所以我很高兴。如果有人能阐明为什么一种方式比另一种方式有效,我会很高兴听到的。
发布于 2019-04-26 04:28:34
当您通过调用.UseApplicationInsights()启用应用程序洞察时,它会添加HttpContextAccessor。ApplicationInsights中有许多需要注入HttpContextAccessor的组件。例如: ClientIpHeaderTelemetryInitializer。
https://stackoverflow.com/questions/55802891
复制相似问题