按照“.NET中的依赖注入”中的建议,我正在解析每个页面构造函数中的组合根,如下所示:
public MyPageConstructor()
{
var container = (Castle.Windsor.WindsorContainer)HttpContext.Current.Application["DIcontainer"];
Controller = container.Resolve<MyPageController>();
}
现在,如果我将控制器设置为瞬态,我必须在卸载页面时手动释放它。如果我按照请求制作,Castle会在请求结束时为我发布但是可能会有性能损失,我不确定。目前,我倾向于使对象瞬态并自行处理释放。
还有其他需要考虑的事项以及推荐的做法是什么?
谢谢。
答案 0 :(得分:2)
我建议使用尽可能长的使用寿命。不幸的是,复杂的应用程序可以有多个入口点,Resolve方法调用了这些入口点。如果您选择Transient,则存在每个请求多次创建某些服务的风险。例如,某些HttpModule可以使用与Page相同的服务。使用PerRequest生命周期可以避免此类问题。
答案 1 :(得分:0)
这取决于,如果你有一个对它有很多依赖的类,那么一遍又一遍地实例化同一个东西的开销可能会很严重。但如果有一些不是线程安全的东西,你最好是短暂的。