C# 如何在使用Server.Transfer在iframe中加载web表单页面时让Autofac注入属性?

C# 如何在使用Server.Transfer在iframe中加载web表单页面时让Autofac注入属性?,c#,webforms,autofac,C#,Webforms,Autofac,编辑:当通过Request.Redirect()检索页面时,它确实起作用。当使用Server.Transfer()导航iframe时,问题就会出现。最好不要将应用程序中对Server.Transfer()的每个引用都临时更改为Response.Redirect(),因为我不知道它们是否真正可以互换 我正在使用一个遗留的web表单应用程序,它包含许多全局变量、god类等,我一直在尝试改进的第一件事是将一些方法分解到特定的类/接口中,并在其中添加依赖项注入。该应用程序主要通过加载Main.aspx页

编辑:当通过Request.Redirect()检索页面时,它确实起作用。当使用Server.Transfer()导航iframe时,问题就会出现。最好不要将应用程序中对Server.Transfer()的每个引用都临时更改为Response.Redirect(),因为我不知道它们是否真正可以互换

我正在使用一个遗留的web表单应用程序,它包含许多全局变量、god类等,我一直在尝试改进的第一件事是将一些方法分解到特定的类/接口中,并在其中添加依赖项注入。该应用程序主要通过加载Main.aspx页面来工作,该页面包含加载后续页面的iframe。我发现在iframe中加载页面时不会发生注入,即使它在外部工作正常

每个页面,包括Main.aspx,都来自一个“ProjectBasePage”,尽管这似乎不是问题所在

Main.aspx:

<iframe id="webservername" src="" scrolling="no" frameborder="0" style="border:0px;height:13px;width:50px;vertical-align:bottom;"></iframe>
Global.asax

static IContainerProvider _containerProvider;

        public IContainerProvider ContainerProvider
        {
            get { return _containerProvider; }
        }

        protected void Application_Start(object sender, EventArgs e)
        {
            var builder = new ContainerBuilder();
            builder.RegisterType<TableRepository>().As<ITableRepository>();

            _containerProvider = new ContainerProvider(builder.Build());
        }
静态IContainerProvider\u containerProvider;
公共IContainerProvider容器Provider
{
获取{return\u containerProvider;}
}
受保护的无效应用程序\u启动(对象发送方,事件参数e)
{
var builder=new ContainerBuilder();
builder.RegisterType().As();
_containerProvider=新的containerProvider(builder.Build());
}

就这样,一点也不复杂。如果我在Page_Load中手动“注入”或自己设置属性,它工作得很好,我只是不知道Autofac由于iframe加载而在哪里出错,而且我没有足够的经验。我很想将iframe转换为母版页或其他内容,但这比我目前承担的工作要多一些。

Autofac意识到了这个问题,不会修复

解决方法是简单地使用手动注射程序:

Autofac已意识到该问题,不会修复

解决方法是简单地使用手动注射程序:

static IContainerProvider _containerProvider;

        public IContainerProvider ContainerProvider
        {
            get { return _containerProvider; }
        }

        protected void Application_Start(object sender, EventArgs e)
        {
            var builder = new ContainerBuilder();
            builder.RegisterType<TableRepository>().As<ITableRepository>();

            _containerProvider = new ContainerProvider(builder.Build());
        }