dependency-injection – 从作用域服务工厂获取主机名
发布时间:2020-12-16 06:39:06 所属栏目:asp.Net 来源:网络整理
导读:我正在创建的其中一个服务需要当前主机名作为参数(不同的请求使用不同的主机名,这会影响我的服务使用的外部资源): public class Foo{ public Foo(string host) {...}} 我正在将其注册为作用域: public void ConfigureServices(IServiceCollection services
我正在创建的其中一个服务需要当前主机名作为参数(不同的请求使用不同的主机名,这会影响我的服务使用的外部资源):
public class Foo { public Foo(string host) {...} } 我正在将其注册为作用域: public void ConfigureServices(IServiceCollection services) { services.AddScoped(s => new Foo(/* get host name for the current request */)); } 在这一点上获取主机名的最简洁方法是什么? 更新:我想出了这个: private static Foo GetFoo(IServiceProvider services) { var contextAccessor = services.GetRequiredService<IHttpContextAccessor>(); var host = contextAccessor.HttpContext.Request.Host.Value; return new Foo(host); } 它是一个好的/支持的解决方案,还是一个黑客? 解决方法
由于您已经正确地将其定义为范围,因此您可以直接在Foo的构造函数中使用IHttpContextAccessor:
public class Foo { public Foo(IHttpContextAccessor contextAccessor) { var host = contextAccessor.HttpContext.Request.Host.Value; // remainder of constructor logic here } } 在GitHub存储库中similar是done很多places;它看起来像一个完美的模式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-web-api – ASP.NET核心,Web API RouteAttribute,以
- 对象Equals相等性比较的通用实现
- asp-classic – 检索ADO Recordset字段名称(经典ASP)
- 当值不为null时,清除在ASP.NET MVC视图中输出值的方法
- asp.net – 如何禁用viewstate的aspx页面?
- asp.net-mvc – Url.RouteUrl返回null
- asp.net-mvc – ASP.NET MVC Views可以在不同的项目中重用吗
- 如何避免异常捕获.NET中的复制粘贴
- asp.net-mvc – 在ASP.NET MVC视图中允许多少逻辑?
- asp.net-mvc-3 – 从我的控制器调用索引视图时路径中的非法
推荐文章
站长推荐
- asp.net-mvc – 适当地url编码空间字符
- iis-7.5 – aspnet_compiler无法映射路径’/’
- asp.net-mvc – ASP.NET MVC 3在文章视图中添加注
- asp.net-mvc – MVC 3项目结构
- asp.net-mvc-2 – 查找要在ASP.NET MVC项目上使用
- asp.net – 使用AD的MVC3授权
- asp.net – 无法加载文件或程序集“Oracle.Manag
- 在asp.net中动态构建SiteMapPath
- 将ASP.NET MVC教给ASP.NET程序员的最佳学习资源是
- 将QueryString附加到asp.net核心Anchor Helper T
热点阅读