C# 依赖注入 延迟注入

有时候一个类里面有比较多的方法,然后有这些方法所依赖的类会有较大区别,有的类生成还会耗费一些时间,所以我们可能希望有用到它的时候,才让它实例化。 这个时候就需要延迟注入了。

我们需要创建一个新的类 LazyLoader

using Microsoft.Extensions.DependencyInjection;
using System;

namespace Malema.Dependency
{
    public class LazyLoader<T> : Lazy<T>
    {
        public LazyLoader(IServiceProvider sp) : base(sp.GetRequiredService<T>)
        {
        }
    }
}
// 添加一个配置
services.AddTransient(typeof(Lazy<>),typeof(LazyLoader<>));

使用它

using System;
using System.Threading.Tasks;

namespace Malema.net.Example
{
    public class Worker
    {
        private readonly Lazy<IMessageWriter> _messageWriter;

        public Worker(Lazy<IMessageWriter> messageWriter)
        {
            _messageWriter = messageWriter;
            // _messageWriter.IsValueCreated  是false. 说明确实没有创建出来
        }

        public async Task ExecuteAsync()
        {
            _messageWriter.Value.Write($"Worker running at: {DateTimeOffset.Now}");
        }
    }
}
最近更新的
...