私たちは非常にトラフィックの多いウェブサイト(週に約600万ページのインプレッション)をまとめる最終段階にあり、新しいアーキテクチャ内のIoCコンテナとしてLinFuを使用しています。
かなり標準的な設定があります。
Web Layer
|
IServices <- Services Implementation
|
IDataRepository <- DataRepository Implementation
|
DataBase
Webレイヤーには、ページで必要とされるServicesオブジェクトのインスタンスを提供するLinFu ServiceContainer(実装ではシングルトン)のインスタンスがあります。DataRepositoryアセンブリ内の各クラスも同じ方法で作成されます(各Servicesコンストラクターは、必要なDataRepositoryオブジェクトのインターフェイスを取り込みます)。
簡単な例は次のとおりです。
IWeatherServices
{
Weather GetForecast();
Weather GetPrediction();
}
[Implements(typeof(IWeatherServices))
WeatherServices(IWeatherForecastRepository, IWeatherPredictionRepository) : IWeatherServices
{
// implementation of methods
}
(およびDataRepositoryクラスの同様の機能)
現時点では、ライフサイクルタイプをデフォルトのままにしています(これはPerRequestだと思います)。
私の主な質問は次のとおりです。
- ServiceContainerをWebアプリ内のシングルトンとして保持する必要がありますか?
- 実装クラスのLifecycleTypeをデフォルト値として保持する必要がありますか?
これは少し制限がないことは知っていますが、負荷テスト中に調整を行っている最中なので、一般的な意見に非常に興味があります。