2016-07-30 2 views
1

내 웹 API에서 autofac을 사용하여 log4net을 등록합니다. 그것은 컨트롤러에서 잘 작동하지만 어떻게 동일한 솔루션에서 공통 라이브러리 프로젝트 클래스에 대해 동일한 log4net 인스턴스를 사용할 수 있습니다.CommonLibrary 프로젝트에서 Autofac과 함께 Log4Net을 사용하는 방법

웹 API에 autofac을 사용하여 log4net을 등록하는 데 아래 코드를 사용했습니다.

// IOC Container Setup uisng Autofac 
var builder = new ContainerBuilder(); 

// Register your Web API controllers. 
builder.RegisterApiControllers(Assembly.GetExecutingAssembly()); 
builder.Register(c => LogManager.GetLogger(typeof(Object))).As<ILog>(); 
builder.RegisterWebApiFilterProvider(config); 
builder.RegisterModule<AMLWebApiModule>(); 
builder.RegisterFilterProvider(); 
var container = builder.Build(); 
config.DependencyResolver = new AutofacWebApiDependencyResolver(container); 

공용 라이브러리 프로젝트의 속성으로 로거를 사용하고 있습니다. public ILog logger { get; set; }

메시지를 기록하려고 할 때 예외가 발생했습니다.

개체 참조가 개체의 인스턴스로 설정되지 않았습니다.

공용 라이브러리 프로젝트에서 log4net을 어떻게 사용할 수 있는지 알려주십시오.

답변

0

그래서이 작품 클래스 라이브러리 프로젝트 2) 클래스 라이브러리 프로젝트에 ILOG 객체를 해결에서

1)를 주입 ILOG를 만들기 위해 두 가지 방법이 있습니다

내가 옵션 1에 갈 것이다) 및 autofac에 모든 구성 요소를 등록하여 DI를 최대한 활용하고 각 구성 요소를 독립적으로 유지합니다.

예제 코드,

는 클래스 라이브러리 프로젝트의 예를

public interface Ilibrary 
{ 
    string GetName(); 
} 

public class Library : Ilibrary 
{ 
    private ILog _log; 
    public Library(ILog log) 
    { 
     _log = log; 
    } 
    public string GetName() 
    { 
     _log.Debug("log message"); 
     return "test"; 
    } 
} 

에 대한 계약을 작성하거나 클래스 라이브러리 프로젝트에 모듈을 생성하고 응용 프로그램 시작에 해당 모듈을 등록합니다.

public class DomainModule : Module 
{ 

    protected override void Load(ContainerBuilder builder) 
     { 
     base.Load(builder); 

     builder.RegisterType<Library>() 
     .AsImplementedInterfaces() 
     .SingleInstance(); 
     } 
} 

또는 애플리케이션 시작시 콘서트 구현에 액세스 할 수있는 경우 직접 등록 할 수도 있습니다.

builder.RegisterType<Library>() 
.AsImplementedInterfaces() 
.SingleInstance(); 
+0

인터페이스가 아닌 추상 클래스에 대해 클래스를 등록하는 방법은 무엇입니까? –

+0

인터페이스처럼 해보십시오. 작동해야한다고 생각합니다. – Prashant

0

당신이 당신의 공통 라이브러리 프로젝트의 속성으로 로거를 사용하고 있기 때문에, 당신은 단지 꾸밀 수/[종속성] 속성과 그 속성을 주석을 달 수 있습니다. 이를 특성 주입이라고합니다. autofac에서 속성 삽입 된 종속성에 대한 추가 구성을 수행해야하는지 확실하지 않지만 검색 할 수없는 경우 시도 할 수 있습니다.

관련 문제