我阅读了有关在Asp.Net中使用Unity的文章。 http://blogs.microsoft.co.il/gilf/2008/07/01/how-to-use-unity-container-in-aspnet/ 他的想法是在Global.asax中构建容器并通过HttpContext访问容器。
public abstract class BasePage<T> : Page where T : class
{
protected override void OnPreInit(EventArgs e)
{
var context = HttpContext.Current;
var accessor = context.ApplicationInstance as IContainerAccessor;
var container = accessor.Container;
container.BuildUp(this as T);
base.OnPreInit(e);
}
. . .
我的问题是:在Global.aspx中共享单个Unity容器有什么好处? 我可以在BasePage中构建容器吗?像这样:
public abstract class BasePage<T> : Page where T : class
{
protected override void OnPreInit(EventArgs e)
{
IUnityContainer container = new UnityContainer();
container.AddNewExtension<MyUnityContainerExtension>();
container.BuildUp(this as T);
base.OnPreInit(e);
}
. . .
}
感谢。
答案 0 :(得分:0)
如果在页面的OnPreInit
事件中构建容器,则意味着您在每个请求上创建一个新的容器实例。在为每个请求创建容器实例时会产生大量开销,这会大大降低Web应用程序的速度。 Unity容器(或任何DI容器)经过优化,每个AppDomain都有一个实例。