セットアップ:
LightinjectComposition.cs
serviceRegistry.Register<IdentityLocator>(f => IdentityLocator.GetInstance());
serviceRegistry.Register<IIdentity>(f => f.GetInstance<IdentityLocator>().Get());
// I could use this too:
// serviceRegistry.Register<IIdentity>(f => f.GetInstance<IdentityLocator>().Get(Thread.CurrentThread.CurrentCulture));
// There are N classes that have a dependency to IIdentity
serviceRegistry.Register<InterfaceN, ClassN>();
IdentityLocator は、次の 2 つのメソッドを持つ同じクラスのインスタンスを取得します。
- Get(): Thread.CurrentThread.CurrentCulture に基づいて内部クラスのインスタンスを取得します。
- Get (CultureInfo): CultureInfo に基づいて内部クラスのインスタンスを取得します。
2 つのプロジェクトがあります。1 つは API (Api と呼ばれます) 用で、もう 1 つは DI コンテナー構成 (Dependency と呼ばれ、他のプロジェクト (NHibernate マップ、サービスなど) への参照を含み、API によって参照されます) 用です。Dependency というプロジェクトでは、LightinjectComposition.cs が存在する場所です。
問題は、NancyFX Bootstrapper では、リクエストで受け取った値に基づいて現在のカルチャが設定されますが、インスタンスが解決された後にスレッドのカルチャが変更されないことです。
現在のカルチャを使用してインスタンスを取得する方法はありますか、または (IoC パターンに関して) 間違っていますか?
NancyFX Bootstrapper では、カルチャを次のように設定しました。
pipelines.BeforeRequest += context =>
{
Thread.CurrentThread.CurrentCulture = context.Culture;
return null;
};
IIdentity の代わりに、IdentityLocator のインスタンスを依存クラスに渡す必要があるのでしょうか。
読んでくれてありがとう!