DI 용 Castle Windsor를 사용하여 동일한 인터페이스를 구현하는 두 가지 클래스가 있습니다. 그 외에는 그들 만의 몇 가지 방법과 속성이 있습니다. Castle DynamicProxy를 사용하고 Castle.Facilities.LoggingLoggingFacility를 통해 Log4Net을 사용하여 일부 로깅을 수행하는 인터셉터를 만들었습니다.캐슬 윈저 인터셉터 인터페이스 없음?
로그 파일은 해당 메소드가 호출 될 때 인터페이스를 통해 구현되는 각 메소드를 깔끔하게 기록합니다. 아래 예제 코드에서 Foo() 메서드는 호출 될 때 기록되지만 LogMeToo() 메서드는 IFoo 구현의 일부가 아니기 때문에 기록되지 않습니다.
다른 인터페이스를 구현하지 않는 메서드는 호출 될 때이 기록되도록합니다. 가능한가요, 그렇다면 어떻게 할 수 있습니까?
public interface IFoo
{
void Bar();
}
[Interceptor(typeof(LoggingInterceptor))]
public class Foo : IFoo
{
public void Bar()
{
// Do Something
}
public void LogMeToo()
{
// Do Something
}
}
public static class Program
{
[STAThread]
public static void Start()
{
var container = new WindsorContainer();
container.Register(Component.For<LoggingInterceptor
>().LifeStyle.Transient);
container.Register(Component.For<IFoo
>().ImplementedBy<Foo
>());
container.AddFacility<LoggingFacility
>(f => f.LogUsing(LoggerImplementation.Log4net).WithConfig("Log4net.config"));
}
}
WPF에게 당신이 방법을 가상하고 그 클래스의 프록시가 생성됩니다 있도록 (첫번째) 서비스로 클래스를 노출하지 않는 한, 그것은 불가능 C# 4.0
답변 해 주셔서 감사합니다. 메소드를 가상으로 만들고 클래스를 서비스로 공개하는 방법에 대한 설명서를 가르쳐 주시겠습니까? 깨진 추상화에 관해서는 : Bar()는 실제 코드에서 LogMeToo()를 새로운 백그라운드 스레드로 시작하고, 그런 일이 발생하면 가로 채기를 원합니다. – KBoek