- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Asp.Net 4.7.2 MVC 应用程序中将 Hangfire 与 Microsoft.Extensions.DependencyInjection 结合使用。我有 DI 设置和工作,我似乎无法正确配置 Hangfire。下面的当前实现运行仪表板,但执行后台任务会返回错误:JobActivator 返回了“Dh.Web.Services.EmailService”类型的 NULL 实例。
我知道 EmailService 已在 DI 中正确设置,因为我可以在调用 BackgroundJob.Enqueue 方法的同一 Controller 中使用 DI 访问它。
我的实现是:
HangfireActivator.cs
public class HangfireActivator : JobActivator
{
private readonly IServiceProvider _serviceProvider;
public HangfireActivator(IServiceProvider serviceProvider)
{
_serviceProvider = serviceProvider;
}
public override object ActivateJob(Type type)
{
return _serviceProvider.GetService(type);
}
}
在 startup.cs 中配置 Hangfire 方法
private void ConfigureHangfire(IServiceProvider serviceProvider, IAppBuilder app)
{
var hangfireConnString = ConfigurationManager.ConnectionStrings["Dh"].ConnectionString;
GlobalConfiguration.Configuration
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
.UseSimpleAssemblyNameTypeSerializer()
.UseRecommendedSerializerSettings()
.UseActivator(new HangfireActivator(serviceProvider))
.UseSqlServerStorage(hangfireConnString, new SqlServerStorageOptions
{
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
QueuePollInterval = TimeSpan.FromSeconds(10),
UseRecommendedIsolationLevel = true,
UsePageLocksOnDequeue = true,
DisableGlobalLocks = true,
}
);
app.UseHangfireServer(new BackgroundJobServerOptions {WorkerCount = 3});
var options = new DashboardOptions()
{
Authorization = new[] {new SystemAuthorizationFilter()}
};
app.UseHangfireDashboard("/hangfire",options);
}
最后是 Startup.cs 中的配置方法
public void Configuration(IAppBuilder app)
{
var services = new ServiceCollection();
//App DI
ConfigureServices(services);
var serviceProvider = services.BuildServiceProvider();
var resolver = new DefaultDependencyResolver(serviceProvider);
DependencyResolver.SetResolver(resolver);
//Hangfire
ConfigureHangfire(serviceProvider,app);
}
我怀疑它的行:var serviceProvider = services.BuildServiceProvider();
正在为我设置所有应用程序 DI 的服务提供商创建一个单独的服务提供商,但我不知道如何在没有该行的情况下将 ServiceProvider 获取到 Hangfire 中的 UseActivator 选项...
我真的很感激任何意见。谢谢!
最佳答案
我已经在我的 DI 中注册了: services.AddTransient<IEmailService,EmailService>();
但是添加这个来注册没有接口(interface)的具体类是有效的。 services.AddTransient<EmailService>();
关于c# - 如何使用 Asp.Net 4.7 和带有 Microsoft.Extensions.DependencyInjection 的 DI 设置 Hangfire?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58213309/
我有一个我创建的服务 (DependencyInjection),我在我的 Controller 上使用它作为: $this->get("service_name")->someMethod() 我想
ASP.Net Core 内置的依赖注入(inject)功能是否支持自动注册服务?我不想像这样手动注册它们: services.Add(new ServiceDescriptor(typeof(IUs
这个库提供了在启动期间实例化已注册的单例,而不是在首次使用它时实例化。 单例通常在首次使用时创建,这可能会导致响应传入请求的延迟高于平时。在注册时创建实例有助于防止第一次Request请求的SLA
使用 Unity、AutoFac 或其他 IOC 容器时,您必须注册并解析 IInterface 才能获取实例。这是您在应用程序类中执行的所有操作的根。 在完成注册/解析之后,我正在创建我的 Main
在Spring 3.1.1中偶然发现使用@Cacheable创建的AOP代理破坏依赖注入(inject)的情况。这是我的场景: 我有一个接口(interface)和一个在实现的方法中使用@Cachea
我一直在使用 symfony/console 来制作命令并像这样注册它们,一切正常: 垃圾箱/控制台: #!/usr/bin/env php add(new LocalitiesCommand(new
我正在使用 sonataNofificationBundle ,他们提供了四个后端。我有自定义要求,所以想再添加一个后端。他们有后端配置 DependencyInjection/configurati
在 ASP.NET CORE Web 应用程序中,我有一个 MyRepository 类和一个管理对存储库(数据库)的访问的接口(interface) IMyRepository。 每次用户连接到应用
我正在尝试将 Microsoft.Extensions.DependencyInjection 合并到一个现有 ASP.NET 4.6.1 应用中。 我知道虽然 .NET Core 内置了它,但对于
我注册了两次类(class),但契约(Contract)不同。 services .AddSingleton() .AddSingleton(sp => sp.GetService()
当我在生产(仅)环境中执行命令时 我有错误 [Symfony\Component\DependencyInjection\Exception\InvalidArgumentException] The
我正在从 Unity Container 迁移我的 .NET 应用程序依赖注入(inject)框架至 Microsoft.Extensions.DependencyInjection . 现在我找不到
当我在生产(仅)环境中执行命令时 我有错误 [Symfony\Component\DependencyInjection\Exception\InvalidArgumentException] The
我正在从 Unity Container 迁移我的 .NET 应用程序依赖注入(inject)框架至 Microsoft.Extensions.DependencyInjection . 现在我找不到
我想从我的包中自动添加路由,而不是将指向我的包的路由方案的链接添加到 routing.yml 中。例如,这可以是管理员的包。每个使用这个包的应用程序都将获得特殊的/admin/xxx 路由,而无需
首先,我使用的是微软的依赖注入(inject)包。 (ServiceProvider, ServiceCollection) 目前进展顺利,除了这个问题。 我有类,我像这样注册到我的 DI this.
我在自己的爱好项目中使用 ASP.NET Core,我想创建一个将由开发人员使用的框架,我想允许可选服务并在未注册时使用默认值。 我遇到了 Unable to resolve service for
使用 Ninject 和 MVVMLight。使用 TransientScope 绑定(bind)到 View 模型。 当 View 消失时, View 模型就会退出范围。 清除我的 View 模型的
使用 Microsoft.Extensions.DependencyInjection 作为容器时如何注册装饰器类? 当以下列方式注册我的类型时(类似于 CaSTLe Windsor),我在解析 IM
我正在使用 ASP.NET Core 进行网络作业。我无法正确设置依赖注入(inject)。 public static async Task Main(string[] args) {
我是一名优秀的程序员,十分优秀!