首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LinFu IoC在高流量网站上的最佳实践

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

Stack Overflow用户
提问于 2011-03-15 10:29:58
回答 2查看 308关注 0票数 2

我们正处于建立一个相当高流量的网站的最后阶段(每周大约有600万次页面印象),并且正在使用LinFu作为新架构中的IoC容器。

我们有一个相当标准的设置:

代码语言:javascript
复制
Web Layer
 |
IServices <- Services Implementation
 |
IDataRepository <- DataRepository Implementation
 |
DataBase

在web层中,我们有一个LinFu ServiceContainer实例(我们的实现中的一个实例),它提供页面所需的服务对象实例。DataRepository程序集中的每个类也是以相同的方式创建的(每个服务构造函数都接受它所需的DataRepository对象的接口)。

一个简单的例子是:

代码语言:javascript
复制
IWeatherServices
{
    Weather GetForecast();
    Weather GetPrediction();
}

[Implements(typeof(IWeatherServices))
WeatherServices(IWeatherForecastRepository, IWeatherPredictionRepository) : IWeatherServices
{
    // implementation of methods
}

(以及DataRepository类的类似功能)

目前,我们将生命周期类型保留为默认类型(我相信这是PerRequest)。

我的主要问题是:

  • 我们是否应该将ServiceContainer作为一个单独的应用程序保存在web应用中?
  • 是否应该将实现类上的LifecycleType保留为默认值?

我知道这有点开放,但我们正在进行负载测试期间的调优,所以我对总体观点非常感兴趣。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-15 11:18:13

拥有容器的一个实例(因此是一个单例)是非常常见的事情。但是,防止在整个应用程序中调用它。相反,使用构造函数注入,让容器只解析最上面的对象。从你的例子来看,我相信你已经这么做了。

短暂的生活方式(在每次调用容器时创建一个新实例)是最简单的事情,通常也是最安全的事情。由于多线程而产生的比赛条件的变化是最小的.另一方面,这是最糟糕的表演生活方式。

你应该改变生活方式吗?如果你的申请足够快,我就不用麻烦了。如果速度不够快,你应该找出将服务转移到独生子女生活方式是否有任何影响。换句话说,遵循里科·马里亚尼的10条规则以获得性能:度量值和度量:-)

票数 1
EN

Stack Overflow用户

发布于 2011-04-13 02:15:00

如果您没有使用LinFu的自动字段/属性/方法注入特性,可以尝试:

代码语言:javascript
复制
container.DisableAutoPropertyInjection();
container.DisableAutoMethodInjection();
container.DisableAutoFieldInjection();

这将大大提高LinFu容器的性能,因为它不必经常检查字段、属性和自动注入的方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5310389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档