Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 从作用域服务工厂获取主机名_Dependency Injection_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

Dependency injection 从作用域服务工厂获取主机名

Dependency injection 从作用域服务工厂获取主机名,dependency-injection,asp.net-core,asp.net-core-mvc,Dependency Injection,Asp.net Core,Asp.net Core Mvc,我正在创建的一个服务需要当前主机名作为参数(不同的请求使用不同的主机名,这会影响我的服务使用的外部资源): 公共类Foo { 公共Foo(字符串主机){…} } 我将其注册为作用域: public void配置服务(IServiceCollection服务) { AddScoped(s=>newfoo(/*获取当前请求的主机名*/); } 此时获取主机名的最干净方法是什么 更新:我想到了这个: private static Foo GetFoo(IServiceProvider服务) {

我正在创建的一个服务需要当前主机名作为参数(不同的请求使用不同的主机名,这会影响我的服务使用的外部资源):

公共类Foo
{
公共Foo(字符串主机){…}
}
我将其注册为作用域:

public void配置服务(IServiceCollection服务)
{
AddScoped(s=>newfoo(/*获取当前请求的主机名*/);
}
此时获取主机名的最干净方法是什么


更新:我想到了这个:

private static Foo GetFoo(IServiceProvider服务)
{
var contextAccessor=services.GetRequiredService();
var host=contextAccessor.HttpContext.Request.host.Value;
返回新的Foo(主机);
}

它是一个好的/受支持的解决方案,还是一个黑客?

既然您已经正确地将其定义为作用域,您可以直接在Foo的构造函数中使用
IHttpContextAccessor

公共类Foo
{
public Foo(IHttpContextAccessor contextAccessor)
{
var host=contextAccessor.HttpContext.Request.host.Value;
//这里是构造函数逻辑的剩余部分
}
}

GitHub存储库中有很多东西;这看起来是一个完美的模式。

我的实际代码实例化了一个外部类,它不知道
IHttpContextAccessor
,但我明白了这个想法,示例也很清楚。谢谢我没有注意到这一点,感谢您提供示例。@DiegoMijelshon我希望我的业务层中的主机名能够更新我从DB获取的图像的基本路径,所以我应该在我的业务层中使用IHttpContextAccessor还是有其他选择。我想保持我的业务层干净,不想在那里使用IHttpContextAccessor。