必要になるたびにデータ プロセッサ オブジェクトの新しいインスタンスを作成する小さなクラスがあります。私はすべてに注入を使用していますが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
拡張機能の作成者に連絡して、コード サンプルが読みにくいので、コード サンプルを更新するよう依頼します。