C# ASP.NET内核使用Hangfire的触发器控制器方法

C# ASP.NET内核使用Hangfire的触发器控制器方法,c#,asp.net-core,asp.net-core-2.0,hangfire,C#,Asp.net Core,Asp.net Core 2.0,Hangfire,大家好 我试图在ASP.NET内核中的控制器中触发某个命令 我已经安装了hangfire并配置了我的Startup.cs public void ConfigureServices(IServiceCollection services) { ... services.AddHangfire(x => x.UseSqlServerStorage('my conn string')); ... } public void Configure(IApplication

大家好

我试图在ASP.NET内核中的
控制器中触发某个命令

我已经安装了hangfire并配置了我的
Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddHangfire(x => x.UseSqlServerStorage('my conn string'));
    ...
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    ...
    // add hangfire
    app.UseHangfireDashboard();
    app.UseHangfireServer();    
    ...
}
但问题是,我的示例控制器有多个依赖注入

public class ProductsController: Controller
{
    private readonly ISomething1 something1;
    private readonly ISomething2 something2;
    private readonly ISomething3 something3;

    public ProductsController(ISomething1 something1, ISomething2 something2, ISomething3 something3){
        this.something1 = something1;
        this.something2 = something2;
        this.something3 = something3;
    }

    public async Task<IActionResult> TriggerMe(){
        ...
    }
}

需要帮忙吗?谢谢你

更新
由于Rotavita与控制器、视图等紧密耦合,我建议分两步解决此问题

  • 使用从视图生成HTML(出于报告/电子邮件目的,将该视图与普通视图分开),您只需要视图/模板路径和模型(包含要呈现的值)
  • 使用HTML生成PDF,使用(
    Rotavita
    在引擎盖下使用此库)

  • 原创

    因为调用
    控制器
    实例是一个由框架完成的过程,cron作业不应该调用或调用它。
    对于您的问题,您只需要添加对方法或委托的引用。假设您要将代码移动到其他类

    var instance=new Foo();
    RecurringJob.AddOrUpdate(() => instance.DoSomething,Cron.Daily);
    
    Foo

    public class Foo
    {
        public void DoSomething()
        {
        //your code
        }
    }
    

    更新
    由于Rotavita与控制器、视图等紧密耦合,我建议分两步解决此问题

  • 使用从视图生成HTML(出于报告/电子邮件目的,将该视图与普通视图分开),您只需要视图/模板路径和模型(包含要呈现的值)
  • 使用HTML生成PDF,使用(
    Rotavita
    在引擎盖下使用此库)

  • 原创

    因为调用
    控制器
    实例是一个由框架完成的过程,cron作业不应该调用或调用它。
    对于您的问题,您只需要添加对方法或委托的引用。假设您要将代码移动到其他类

    var instance=new Foo();
    RecurringJob.AddOrUpdate(() => instance.DoSomething,Cron.Daily);
    
    Foo

    public class Foo
    {
        public void DoSomething()
        {
        //your code
        }
    }
    


    由于它是一个控制器方法,我认为最好的做法是通过HTTP而不是通过编程方式调用它,因为这样你就要离开框架,用管道和错误处理来做它应该做的事情。但是我需要触发这个控制器方法。因为我正在使用Rotativa生成PDF字节,所以要生成我的PDF。那么,cron作业的目的是什么?因为Rotavita专门用于从Razor viewsMy controller方法生成pdf文件,所以我需要使用rotativa自动触发它。在普通类中使用rotativa将不起作用,因为它需要ControllerContext我明白了,但为什么要从hangfire触发PDF生成?因为它是一种控制器方法,我想说,这里最好的做法是通过HTTP而不是通过编程来调用它,因为这样你就离开了框架,用管道和错误处理来做它应该做的事情。但是我需要触发那个控制器方法。因为我正在使用Rotativa生成PDF字节,所以要生成我的PDF。那么,cron作业的目的是什么?因为Rotavita专门用于从Razor viewsMy controller方法生成pdf文件,所以我需要使用rotativa自动触发它。在普通类中使用rotativa不会起作用,因为它需要ControllerContext我明白了,但为什么要从hangfire触发PDF生成?你不明白我的问题它是一个具有多个依赖项注入的控制器类普通类没有问题,但问题是当你的控制器类具有依赖项注入时,正如我所说,类似的事情不应该由cron jobs完成“类似的事情不应该由cron jobs完成”-为什么不?你不明白我的问题它是一个具有多个依赖项注入的控制器类普通类没有问题,但问题是当你有一个控制器类具有依赖项注入时,正如我所说,这样的事情不应该由cron-jobs来做“这样的事情不应该由cron-jobs来做”——为什么不呢?