【发布时间】:2021-03-13 20:12:43
【问题描述】:
我有一个使用标准 .net 依赖注入的 asp.net 5 Web 应用程序。据我了解,开箱即用的Hangfire 将使用与MVC 将用于控制器等的相同依赖项来实例化作业。我想在实例化作业时注入不同的依赖项。我该怎么做?
例如有些类依赖于IHttpContextAccessor,所以我想提供一个替代方案,用于在hangfire 作业中使用,它将从序列化的作业参数中获取其状态。
我看到一些关于复杂事物的讨论 here,听起来像是我需要的……但我喜欢一个简单的例子 :-)
【问题讨论】:
-
您想使用提供者或工厂模式。看看这个答案。 stackoverflow.com/a/44177920/860539
-
我会说你应该避免在直接请求处理之外(在控制器之外)使用面向 web 上下文的 IHttpContextAccessor。您的控制器应该构建一个 Poco 以传递给业务处理类,这与通过 hangfire 调用时传递的参数相同。无论如何,如果更改业务代码不是一个可行的选择,我会尝试装饰 IHttpContextAccessor,当装饰的访问器没有提供 httpcontext 时提供我自己的实现。 andrewlock.net/…
-
根据你想从 IHttpContextAccessor 传递的上下文信息,你也可以使用过滤器stackoverflow.com/a/57396553/1236044
标签: asp.net-core hangfire asp.net-core-5.0