我有一個小類,每次需要它時都會創建一個數據處理器對象的新實例。我正在使用注入的一切,但我不知道如何獲得激活的實例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
示例很難閱讀。
爲什麼你不希望注入內核對象? –
你不想注入內核嗎?也許創建內核(或其他類)實現的第二個接口('IDataProcessingServiceProvider')? –
@EricPetroelje因爲它危害組合性。 – deanvmc