有时候一个类里面有比较多的方法,然后有这些方法所依赖的类会有较大区别,有的类生成还会耗费一些时间,所以我们可能希望有用到它的时候,才让它实例化。 这个时候就需要延迟注入了。
我们需要创建一个新的类 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}");
}
}
}