- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 asp.net core 中有一个使用内置 DI 框架的应用程序。我想向提供者添加一个按请求(即 transient )服务,但我想在其构造中实际使用该请求。
services.AddTransient<IMyService>(provider => { ... });
provider
object 没有关于当前请求的任何内容。有没有办法在不升级到更强大的 DI 框架的情况下实现我想要做的事情?
最佳答案
如评论中所述,您可以注入(inject) IHttpContextAccessor
进入您的服务并访问它,如果 HttpContext
是你唯一需要的。
public class MyService : IMyService
{
private readonly HttpContext context;
public MyService(IHttpContextAccessor httpContextAccessor)
{
if(IHttpContextAccessor==null)
throw new ArgumentNullException(nameof(httpContextAccessor));
context = httpContextAccessor.HttpContext;
}
}
HttpContext
之外可用的东西,你可以创建一个工厂并将参数传递给工厂
public class MyServiceFactory : IMyServiceFactory
{
// injecting the HttpContext for request wide service resolution
public MyServiceFactory(IHttpContextAccessor httpContextAccessor) { ... }
public IMyService Create(IDependency1 dep1, IDependency2 dep 2, string someRuntimeConfig)
{
IServiceProvider provider = this.context.RequestServices;
var myService = new MyService(provider.GetService<ISomeRepository>(), dep1, dep2, someRuntimeConfig);
return myService;
}
}
IMyServiceFactory
到您需要的类(class)
IMyService
.
关于dependency-injection - 使用来自请求的信息的 AddTransient 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36186670/
我在 asp.net core 中有一个使用内置 DI 框架的应用程序。我想向提供者添加一个按请求(即 transient )服务,但我想在其构造中实际使用该请求。 services.AddTrans
在最新的机器人示例中,我们可以看到机器人正在被添加到服务集合中,如下所示 services.AddTransient(); 但在较旧的样本中,我们看到了以下方法 services.AddBot(opt
我想实现 dependency injection ASP.NET Core 中的 (DI)。因此,将此代码添加到 ConfigureServices 方法后,两种方式都有效。 ASP.NET Cor
根据文档,当我像下面这样配置 DbContext 时,DI 在范围内注册它(每个 http 请求) services.AddEntityFramework() .AddSqlServer()
我有一个用于获取一些信息的服务,该方法在链中有一堆异步调用。 public interface IFooService { Task GetFooAsync(); } 具体类, public
看完this帖子我可以理解 AddTransient、AddScoped 和 AddSingleton 之间的区别,但是,我看不到它们每个的实际用法。 我的理解是 添加 transient 每次客户端
我正在尝试对类 TWService 中的方法进行单元测试,并且需要两个依赖项才能注入(inject),即 IXMLResponseSave 和 IConfiguration。我可以在我的 Fact 中
我是一名优秀的程序员,十分优秀!