c#

c# iserviceprovider 可以延迟加载吗

小樊
81
2024-12-04 04:36:45
栏目: 编程语言

是的,C# 的 IServiceProvider 可以实现延迟加载。要实现延迟加载,你可以使用 Lazy<T> 类来包装你的服务实例。Lazy<T> 类会延迟初始化,直到你第一次访问它时才会实际创建实例。

以下是一个简单的示例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

public interface IService
{
    string GetServiceData();
}

public class Service : IService
{
    public string GetServiceData()
    {
        return "Service data";
    }
}

public class LazyServiceProvider : IServiceProvider
{
    private readonly Dictionary<Type, Lazy<object>> _services = new Dictionary<Type, Lazy<object>>();

    public void AddService(Type serviceType, Lazy<object> serviceInstance)
    {
        _services[serviceType] = serviceInstance;
    }

    public object GetService(Type serviceType)
    {
        if (_services.TryGetValue(serviceType, out var lazyService))
        {
            return lazyService.Value;
        }

        throw new InvalidOperationException($"Service of type {serviceType} is not available.");
    }
}

class Program
{
    static async Task Main(string[] args)
    {
        var lazyServiceProvider = new LazyServiceProvider();
        lazyServiceProvider.AddService(typeof(IService), new Lazy<IService>(() => new Service()));

        // 延迟加载服务
        var service = (IService)lazyServiceProvider.GetService(typeof(IService));
        Console.WriteLine(service.GetServiceData());
    }
}

在这个示例中,我们创建了一个 LazyServiceProvider 类,它实现了 IServiceProvider 接口。我们使用 Lazy<T> 类来包装 Service 类的实例,从而实现延迟加载。当我们第一次调用 GetService 方法时,Service 类的实例才会被创建。

0
看了该问题的人还看了