Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dependency injection 在Global.aspx中共享singleton Unity容器有什么好处?_Dependency Injection_Unity Container - Fatal编程技术网

Dependency injection 在Global.aspx中共享singleton Unity容器有什么好处?

Dependency injection 在Global.aspx中共享singleton Unity容器有什么好处?,dependency-injection,unity-container,Dependency Injection,Unity Container,我读了一篇关于在Asp.Net中使用Unity的文章。 他的想法是在Global.asax中构建容器,并通过HttpContext访问容器 public abstract class BasePage<T> : Page where T : class { protected override void OnPreInit(EventArgs e) { var context = HttpContext.Current; var ac

我读了一篇关于在Asp.Net中使用Unity的文章。 他的想法是在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);

    }


. . .
公共抽象类基页:其中T:class的页
{
受保护的重写void OnPreInit(EventArgs e)
{
var context=HttpContext.Current;
var accessor=context.ApplicationInstance作为IContainerAccessor;
var container=accessor.container;
容器。堆积物(此为T);
基于preinit(e);
}
. . .
我的问题是:在Global.aspx中共享singleton 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);

   }

. . .
}
公共抽象类基页:其中T:class的页
{
受保护的重写void OnPreInit(EventArgs e)
{ 
IUnityContainer容器=新的UnityContainer();
container.AddNewExtension();
容器。堆积物(此为T);
基于preinit(e);
}
. . .
}

谢谢。

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