在Global.asax中共享单个Unity容器有什么好处?

时间:2013-11-24 18:26:53

标签: dependency-injection unity-container

我阅读了有关在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);

   }

. . .
}

感谢。

1 个答案:

答案 0 :(得分:0)

如果在页面的OnPreInit事件中构建容器,则意味着您在每个请求上创建一个新的容器实例。在为每个请求创建容器实例时会产生大量开销,这会大大降低Web应用程序的速度。 Unity容器(或任何DI容器)经过优化,每个AppDomain都有一个实例。