私はSimple Injectorを使用しています。私は最初からDIを使用しているバックグラウンドプロセッサを持っています。それは実行するピックアップジョブ、およびそれらを実行します。しかし、各ジョブは、独自のスコープ内で実行しなければならないため、いくつかのコンテキスト依存性を無効にすることができます。たとえば、特定のセキュリティコンテキスト(作成元のセキュリティコンテキスト)内でジョブを実行する必要があるため、新しいスコープを開始してISecurityContext
を上書きしてジョブを適切に保護する必要があります。スコープ内の依存関係を無効にする適切な方法
これを達成するために、新しいコンテナ(適切なISecurityContext
)を作成し、スコープを開始してジョブを実行していましたが、これが適切かどうかはわかりません。
RUNJOB
private readonly Func<ISecurityContext, Container> _containerFactory;
internal async Task RunJob(BackgroundJob job) {
var parameters = job.GetParameters();
var securityContext = parameters.SecurityContext;
using (var container = _containerFactory(securityContext))
using (AsyncScopedLifestyle.BeginScope(container)) {
// Run the job within this scope.
}
}
DIビット
container.RegisterSingleton<Func<ISecurityContext, Container>>(() => securityContext => {
var c = new Container();
RegisterDependencies(c);
c.Options.AllowOverridingRegistrations = true;
c.Register<ISecurityContext>(() => securityContext, Lifestyle.Scoped);
return c;
});
それは私に右に感じることはありませんが、私は正解が何であるかわかりません。
優しく、ありがとうございます。これは間違いなく大きな改善です。 –