В своем проекте Asp.Net я хочу использовать свойство Auto-wiring, например для моего ILogger. По сути, я поместил его как свойство в класс, где мне нужно его использовать. Как ниже.
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 3.5.
- Я не вижу, что мне не хватает. Я думаю, это может быть потому, что инъекция вовлекается позже в процесс и не устанавливается в запрошенном классе.
Ссылка на desc. использования: http://structuremap.github.com/structuremap/ConstructorAndSetterInjection.htm#section7