在我的 Asp.Net 项目中,我想使用 Property Auto-wiring,例如用于我的 ILogger。基本上,我将它作为 Property 放入需要使用它的类中。如下所示。
public class UserControlBase : UserControl
{
public ILogger CLogger { get; set; }
....
}
public partial class IPTracking : UserControlBase
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
//it works
ILogger logger = ObjectFactory.GetInstance<ILogger>();
logger.LogInfo(string.Format("Client IP: {0}", ip));
//it does not work
CLogger.LogInfo(string.Format("Client IP: {0}", ip));
}
}
}
但是,在继承控件中调用时,记录器为空。我检查了容器,它确实设置为如上面的实现所示。下面是从 Global.asax 调用的设置。
public static void SetupForIoC()
{
Debug.WriteLine("SetupForIoC");
ObjectFactory.Initialize(x =>
{
x.FillAllPropertiesOfType<ILogger>().Use<EntLibLogger>();
});
Debug.WriteLine(ObjectFactory.WhatDoIHave());
}
感谢您的任何建议,提示?X。
更新:
- 我之前没有提到,但它的 Asp.Net webforms 3.5。
- 我看不到我错过了什么。我想这可能是因为注入在稍后的过程中涉及并且没有在请求的类中设置。
链接到描述。用法:http ://structuremap.github.com/structuremap/ConstructorAndSetterInjection.htm#section7