编辑: 在Request.Redirect()检索页面时工作,当使用Server.Transfer()导航iframe时出现问题。我希望不要只是将应用程序中对Server.Transfer()的每个引用临时更改为Response.Redirect(),因为我不知道它们是真正可以互换的
我正在使用遗留的Web表单应用程序,其中包含许多全局变量,上帝类等,我一直在努力改进的第一件事是将一些方法分解为特定的类/接口并添加依赖注入除此之外。这个应用程序主要通过加载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>
Overview.aspx.cs
[InjectProperties]
public partial class Overview : ProjectBasePage
{
public ITableRepository TableRepo { get; set; }
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());
}
这真的是关于它,没有什么复杂的。如果我在Page_Load中手动“注入”或者自己设置属性,它工作正常,我只是不知道Autofac因为iframe加载而绊倒的地方,我没有足够的经验。我很乐意将iframe转换为Master Page或者其他东西,但这比我现在可以做的更多。
答案 0 :(得分:0)
Autofac 已意识到该问题,但不会修复。
https://github.com/autofac/Autofac/issues/337
解决方法是简单地使用手动注入程序: https://autofaccn.readthedocs.io/en/latest/integration/webforms.html#manual-property-injection