キャッスルウィンザーをDIに使用すると、同じインターフェースを実装する2つのクラスがあります。それに加えて、独自のメソッドとプロパティがあります。私は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