如何避免解析不需要的服务?



我有一个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
}
}
}

然而,据我所知,服务在每个请求时都被解析,即使它每周只需要一次。

这需要时间和内存。

是否有一种方法只在服务被使用时才解析它?

如何

一个选项可以是将其注册为Func<MyService>,以便您可以延迟实例化,例如registration:

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>();

你可以将它注册为单例,那么它将只是它的一个项目

解析并不重要(它不会每次都创建一个新的,它只会从某种字典中获取它)

看看这篇微软的文章:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-5.0

相关内容

  • 没有找到相关文章

最新更新