LinFu IoC高流量网站的最佳实践

我们正处于建立一个相当高流量的网站(每周大约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保留为默认值? 我知道这有点开放,但我们正在进行负载测试期间的调整过程,因此我对一般意见非常感兴趣。     
已邀请:
拥有一个容器实例(因此是一个单例)是一件很常见的事情。但是,要防止在整个应用程序中调用它。相反,使用构造函数注入,让容器只解析最顶层的对象。从你的例子来看,我相信你已经这样做了。 瞬态生活方式(在每次调用容器时创建一个新实例)是最简单的事情,通常是最安全的事情。由于多线程而具有竞争条件的变化是最小的。另一方面,这是表现最差的生活方式。 你应该改变生活方式吗?如果您的应用程序足够快,我不应该打扰。如果速度不够快,您应该了解移动服务对单身生活方式是否有任何影响。换句话说,遵循Rico Mariani的10项绩效规则:衡量,衡量,衡量,衡量,衡量,衡量,衡量,衡量,衡量和衡量:-)     
如果您没有使用LinFu的自动字段/属性/方法注入功能,您可以尝试:
container.DisableAutoPropertyInjection();
container.DisableAutoMethodInjection();
container.DisableAutoFieldInjection();
这应该会给LinFu容器带来显着的性能提升,因为它不必经常检查您的字段,属性和自动注入方法。     

要回复问题请先登录注册