Ninject.Extensions.Interception
(より具体的にはInterceptAttribute
) とプロキシを使用Ninject.Extensions.Interception.Linfu
して C# アプリにログ記録メカニズムを実装していますが、プロキシされたクラスが複数のインターフェイスを実装するときにいくつかの問題に直面しています。
インターフェイスを実装し、抽象クラスから継承するクラスがあります。
public class MyClass : AbstractClass, IMyClass {
public string SomeProperty { get; set; }
}
public class LoggableAttribute : InterceptAttribute { ... }
public interface IMyClass {
public string SomeProperty { get; set; }
}
public abstract class AbstractClass {
[Loggable]
public virtual void SomeMethod(){ ... }
}
ServiceLocator から MyClass のインスタンスを取得しようとすると、Loggable属性によりプロキシが返されます。
var proxy = _serviceLocator.GetInstance<IMyClass>();
問題は、返されるプロキシがAbstractClassインターフェースのみを認識し、 SomeMethod()を公開していることです。その結果、存在しない SomePropertyArgumentException
にアクセスしようとすると、エラーが発生します。
//ArgumentException
proxy.SomeProperty = "Hi";
この場合、複数のインターフェイスを公開するプロキシを作成するために mixin またはその他の手法を使用する方法はありますか?
ありがとう
パウロ