我有一个小类,每次需要它时都会创建一个数据处理器对象的新实例。我对所有事情都使用了注入,但我无法弄清楚如何在IDataProcessingService
不注入kernel
.
有一个更好的方法吗。我知道我可以制作一个静态网关而不是注入,但我认为在不同的皮肤中这是同样的问题。
public class DataProcessingManager
{
private readonly Dictionary<IDataProcessingRequest, IDataProcessingService> _activeProcessingServices;
private readonly IKernel _kernel;
public DataProcessingManager(IKernel kernel)
{
_kernel = kernel;
_activeProcessingServices = new Dictionary<IDataProcessingRequest, IDataProcessingService>(new DataProcessingRequestComparer());
}
public void ProcessFor(IDataProcessingRequest dataProcessingRequest)
{
if (!_activeProcessingServices.ContainsKey(dataProcessingRequest))
{
var _processingService = _kernel.Get<IDataProcessingService>();
_activeProcessingServices.Add(dataProcessingRequest, _processingService);
_processingService.ProcessingFinished +=
(sender, args) => _activeProcessingServices.Remove(dataProcessingRequest);
_processingService.Process(dataProcessingRequest);
}
}
}
编辑 2:
我不得不更改接受的答案,因为最初建议的实现不是创建我需要的新实例。我知道我可以通过引用内核来使用原始答案,但这也不是我想要的。最后,.ToFactory()
新答案中的约定是更好的方法。
我将联系扩展的作者并要求他更新代码示例,因为Foo..Bar
示例难以阅读。