我有一個 Razor 頁面,它使用一項服務進行每周運行一次的維護作業,如下所示:
public class IndexModel : PageModel
{
public IndexModel(IMyService service)
{
myService = service;
}
private IMyService myService;;
public void OnGet()
{
if (DateTime.Now - LastCheck > TimeSpan.FromDays(7))
{
IMyService useService = myService; // Use the service
}
}
}
但是,據我了解,該服務會根據每個請求得到解決,即使每周只需要一次。
這會花費時間和記憶體。
有沒有辦法只在使用時決議服務?
怎么能
uj5u.com熱心網友回復:
一種選擇是將其注冊為 aFunc<MyService>以便您可以延遲實體化例如注冊:
services.AddSingleton<Func<MyService>>(_ => () =>
return (DateTime.Now > TimeSpan.FromDays(7)) ? new MyService() : null);
然后
public class IndexModel : PageModel
{
public IndexModel(Func<MyService> func)
{
myService = func.Invoke();
}
private IMyService myService;
public void OnGet()
{
myService?.DoSomething();
}
}
另一種選擇可能是將其注冊為單例,例如
services.AddSingleton<IMyService, MyService>();
uj5u.com熱心網友回復:
您可以將其注冊為單例,那么它將只是其中的一項
決議并不重要(它不會每次都創建一個新的,它只會從某種字典中獲取它)
看看這篇微軟文章:https : //docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-5.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/335843.html
