我们正处于建立一个流量相当高的网站(每周大约 600 万页印象数)的最后阶段,并且正在使用 LinFu 作为新架构中的 IoC 容器。
我们有一个非常标准的设置:
Web Layer
|
IServices <- Services Implementation
|
IDataRepository <- DataRepository Implementation
|
DataBase
在 web 层,我们有一个 LinFu ServiceContainer 的实例(在我们的实现中是一个单例),它根据页面的需要提供 Services 对象的实例。DataRepository 程序集中的每个类也以相同的方式创建(每个 Services 构造函数都接受它需要的 DataRepository 对象的接口)。
一个简单的例子是:
IWeatherServices
{
Weather GetForecast();
Weather GetPrediction();
}
[Implements(typeof(IWeatherServices))
WeatherServices(IWeatherForecastRepository, IWeatherPredictionRepository) : IWeatherServices
{
// implementation of methods
}
(以及 DataRepository 类的类似功能)
我们目前将生命周期类型保留为默认值(我相信这是 PerRequest)。
我的主要问题是:
- 我们是否应该将 ServiceContainer 保留为 Web 应用程序中的单例?
- 实现类上的 LifecycleType 是否应该保留为默认值?
我知道这有点开放,但我们正在负载测试期间进行调整,所以我对一般意见非常感兴趣。