繁体   English   中英

如何避免在不需要时解决服务?

[英]How can I avoid resolving a service when not needed?

我有一个 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>以便您可以延迟实例化例如注册:

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 : //docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-5.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM