내 Asp.Net 프로젝트에서 속성 자동 배선을 사용하고 싶습니다. 내 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));
}
}
}
그러나 상속 된 컨트롤을 호출 할 때 logger는 null입니다. 나는 컨테이너를 점검했고 위의 구현 예와 같이 설정했다. 아래는 Global.asax에서 호출되는 설정입니다.
public static void SetupForIoC()
{
Debug.WriteLine("SetupForIoC");
ObjectFactory.Initialize(x =>
{
x.FillAllPropertiesOfType<ILogger>().Use<EntLibLogger>();
});
Debug.WriteLine(ObjectFactory.WhatDoIHave());
}
조언을 주셔서 감사합니다. X.
업데이트 :
- 내가 전에 언급 didnt한다, 그러나 그것 Asp.Net 3.5을 웹 양식.
- 내가 무엇을 놓치고 있는지 알 수 없습니다. 나는 주입이 나중에 프로세스에 참여하게되고 요청 된 클래스에서 설정되지 않기 때문에 그것이 될 수 있다고 생각합니다.
desc. 사용법 : http://structuremap.github.com/structuremap/ConstructorAndSetterInjection.htm#section7
죄송합니다. 이해가 가지 않습니다. 제안 된 솔루션은 특정 생성자를 생성해야합니까? 현재 클래스 (EntLibLogger) 로깅 클래스에 대한 매개 변수가 적은 매개 변수가 있습니다. 특정 상황에 필요한 클래스를 주입 할 필요가 있습니까? –
내가 사용하고있는 log4net 로거는 유형을 로깅 범위로 사용할 수 있습니다. 시간에 로거 스코프를 수업에 적용시키는 것이 좋습니다. 문제에 대한 컨텍스트를 얻는 것이 매우 빠릅니다. 로거 범위를 어떻게 잡았는지 잘 모르겠습니다. 로거의 구성을 제어 할 필요가 없다면 FillAllPropertiesOfType이 필요합니다. –
KevM