SimpleInjectorとハイブリッドWebリクエスト/スレッドのライフスタイルに関する最近の質問に続いて、私は技術的な要件を完全に理解しておらず、実際には必要のないことを行っているようです。
このコードで
interface IUnitOfWork { }
interface IWebUnitOfWork : IUnitOfWork { }
interface IThreadUnitOfWork : IUnitOfWork { }
class UnitOfWork : IWebUnitOfWork, IThreadUnitOfWork { }
container.RegisterPerWebRequest<IWebUnitOfWork, UnitOfWork>();
container.RegisterLifetimeScope<IThreadUnitOfWork, UnitOfWork>();
container.Register<IUnitOfWork>(() => container.GetInstance<UnitOfWork>());
// Register as hybrid PerWebRequest / PerLifetimeScope.
container.Register<UnitOfWork>(() =>
{
if (HttpContext.Current != null)
return container.GetInstance<IWebUnitOfWork>() as UnitOfWork;
else
return container.GetInstance<IThreadUnitOfWork>() as UnitOfWork;
});
私の理解では、IIS内で実行されているAppDomainのIWebUnitOfWork
場合はが返されます。そうでない場合は、LifetimeScopeのインスタンスを明示的に宣言してコンテナーへの呼び出しをラップしない限りエラーが発生します(これにより)が返されIThreadUnitOfWork
ます。
次の声明は、私が何をしているかを完全には理解していないことに気づきました!
ただし、すべてを追加するハイブリッドライフスタイルは必要ないようです。ハイブリッドライフスタイルは、動的に(GetInstanceの呼び出しごとおよびインジェクションごとに)切り替えることができるライフスタイルですが、起動時に切り替える必要があるだけのようです。
私の質問はこれです:IIS内で実行されているAppDomain内にロードされたコンテナ(またはその他のクラス)は、静的またはインスタンスであり、HttpContextが存在しなくても呼び出すことができますか?