我有一个包含以下属性的页面:
public partial class CustomPage : Page
{
[Dependency]
public ILogger Logger { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
Response.Write((this.Logger == null) ? "Not initialized" : "Initialized");
}
}
可以看出,ILogger是一个应该注入此类的依赖项。
Unity配置文件的配置如下:
<unity>
<alias alias="ILogger" type="Logging.ILogger, AssemblyName" />
<alias alias="Logger" type="Logging.Logger, AssemblyName" />
<container>
<register type="ILogger" mapTo="Logger">
<lifetime type="singleton"/>
</register>
</container>
</unity>
在我的Global.ascx文件中,Application_Start事件我有以下代码:
var container = new UnityContainer();
container.LoadConfiguration();
container.Resolve<CustomPage>();
我期望的是,当CustomPage运行时,ILogger会被注入,但实际行为是它总是为空。
如何正确配置?
由于
答案 0 :(得分:0)
使用ASP.NET Page Factory。
您需要在CustomPage类和Factory中添加构造函数以传递适当的参数。
亚伊尔
答案 1 :(得分:0)
我创建了一个基页类,其中属性依赖注入发生在Page_PreInit:
上public class BasePage<T> : Page where T: class
{
[Dependency]
public ILogger Logger { get; set; }
protected void Page_PreInit(object sender, EventArgs args)
{
((IContainerAccessor)HttpContext.Current.ApplicationInstance).Container.BuildUp<T>(this as T);
}
}
无需单独的处理程序。
答案 2 :(得分:0)
您可以编写HttpModule并处理每个请求和创建页面后触发的一个预请求事件。这是您注入房产所需的地点。