这个问题是因为订阅的 Action 是在构造函数中定义的,在 DI 容器中实例化时,这个 Action 还没有被赋予值,所以会出现空值。解决方法是使用延迟加载,将订阅定义为一个 Func,在需要时调用获取订阅。
代码示例:
public class MyService
{
private readonly Func
public MyService(Func, IDisposable> subscribe)
{
this.subscribe = subscribe;
}
public async Task StartListening()
{
// 延迟加载获取订阅
var subscription = subscribe(HandleString);
await Task.Delay(5000);
subscription.Dispose();
}
private void HandleString(string message)
{
Console.WriteLine($"Received string: {message}");
}
}