В моем проекте 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));
}
}
}
Однако при вызове унаследованного элемента управления регистратор имеет значение null. Я проверил контейнер, и он определенно установлен как показано выше. Ниже приведена настройка, которая вызывается из Global.asax.
public static void SetupForIoC()
{
Debug.WriteLine("SetupForIoC");
ObjectFactory.Initialize(x =>
{
x.FillAllPropertiesOfType<ILogger>().Use<EntLibLogger>();
});
Debug.WriteLine(ObjectFactory.WhatDoIHave());
}
Спасибо за любой совет, отзыв? X.
Update:
- я не упоминал ранее, но его Asp.Net WebForms 3.5.
- Я не вижу, что мне не хватает. Я предполагаю, что это может быть потому, что инъекция будет задействована позже в процессе и не будет установлена в запрошенном классе.
Ссылка на desc. использования: http://structuremap.github.com/structuremap/ConstructorAndSetterInjection.htm#section7
Прошу прощения, я не понимаю. Требуется ли предлагаемое решение для создания конкретного конструктора? У меня в настоящее время только параметр less меньше конструктора для ведения журнала (EntLibLogger). Существует ли конкретная потребность в инъекции требуемого класса в конкретный контекст? –
Логгер log4net, который я использовал, может принимать тип в качестве области ведения журнала. Приятно, что ваши регистраторы часто бывают в ваших классах. Делает его очень быстрым, чтобы получить контекст проблемы. Не знаете, как вы просматривали регистраторы. Если вам не нужно контролировать строительство вашего регистратора, FillAllPropertiesOfType10 должен делать то, что вам нужно. –
KevM