第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 dbcontext/工作單元發(fā)送到 Hangfire 作業(yè)過濾器

如何將 dbcontext/工作單元發(fā)送到 Hangfire 作業(yè)過濾器

C#
莫回?zé)o 2022-12-31 12:51:36
我們正在將 Hangfire 用于一些夜間和長時間運行的作業(yè),并且我們正在單獨的數(shù)據(jù)庫中跟蹤每個作業(yè)的其他相關(guān)詳細信息/元數(shù)據(jù),以避免將來出現(xiàn) Hangfire 升級問題。工作過濾器 ( https://docs.hangfire.io/en/latest/extensibility/using-job-filters.html ) 將幫助我們以更容易的方式跟蹤每個工作的狀態(tài),但我找不到如何將依賴項發(fā)送到作業(yè)過濾器的示例。我們正在運行帶有依賴注入 (DI) 和存儲庫 + 工作單元模式的 ASP.NET Core。我如何才能從作業(yè)過濾器中訪問數(shù)據(jù)庫上下文(或工作單元,或任何其他可通過 DI 獲得的項目)?謝謝編輯 我創(chuàng)建了一個存儲庫,其中包含一個小示例項目,概述了我在這里嘗試做的事情: https ://github.com/joelpereira/hfjobfilter/tree/master/HFJobFilter它編譯但在行上有錯誤:.UseFilter(new TypeFilterAttribute(typeof(LogToDbAttribute)))
查看完整描述

1 回答

?
波斯汪

TA貢獻1811條經(jīng)驗 獲得超4個贊

從我的頭頂開始,您可以嘗試將 JobFilter 添加為TypeFilter,它會自動注入依賴項(如果您的構(gòu)造函數(shù)中有依賴項)LogEverythingAttribute,因此請修改您提供的鏈接中的示例:


public class EmailService

{

    [TypeFilter(typeof(LogEverything))]

    public static void Send() { }

}


GlobalJobFilters.Filters.Add(new TypeFilterAttribute(typeof(LogEverythingAttribute())));

免責(zé)聲明:我自己沒有測試過以上內(nèi)容,所以請告訴我是否可行。


已編輯


嘗試像下面這樣配置 Hangfire ConfigureServices,看看是否可行


services.AddHangfire(config =>

{

    config.UseFilter(new TypeFilterAttribute(typeof(LogToDbAttribute)));


    // if you are using the sqlserverstorage, uncomment the line and provie

    // the required prameters

    // config.UseSqlServerStorage(connectionString, sqlServerStorageOptions);

});

更新的答案


請查看我對您提供的代碼所做的更改。我已經(jīng)對其進行了測試并且可以正常工作。下面幾點需要注意。


請查看我是如何使用利用 HttpClientFactory 和類型化客戶端的 AddHttpClient 方法注冊 HttpClient 的。這是使用 HttpClient 的推薦方式。你可以在這里閱讀更多相關(guān)信息


services.AddHttpClient<HfHttpClient>(client =>

{

    client.BaseAddress = new Uri("http://localhost:44303");


    // you can set other options for HttpClient as well, such as

    //client.DefaultRequestHeaders;

    //client.Timeout

    //...

});

此外,您需要注冊LogDbAttribute,然后在 UseFilter 調(diào)用中解析它,使用IServiceProvider


// register the LogToDbAttribute

services.AddSingleton<LogToDbAttribute>();

// build the service provider to inject the dependencies in LogDbAttribute

var serviceProvider = services.BuildServiceProvider();

services.AddHangfire(config => config

.UseSqlServerStorage(Configuration.GetConnectionString("HangfireDBConnection"))

.UseFilter(serviceProvider.GetRequiredService<LogToDbAttribute>()));

我還注入了 ILogger 以證明它正在工作。出于某種原因,如果您嘗試對 HttpClient 執(zhí)行任何操作,它就會掛起。也許,原因是它是一個后臺作業(yè)并且所有 HttpClient 調(diào)用都是異步的,所以它不會返回并且兩個進程試圖互相等待。


如果您打算注入 HttpClient,您可能需要調(diào)查一下。但是,記錄器工作正常。


此外,您不需要從 TypeFilterAttribute 繼承 LogDbAttribute。TypeFilterAttribute 解決方案并不像我最初建議的那樣工作。


查看完整回答
反對 回復(fù) 2022-12-31
  • 1 回答
  • 0 關(guān)注
  • 84 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號