他のいくつかのインターフェースに継承される基本インターフェースがあります。このインターフェイスには 1 つのメソッドがあります。
[ServiceContract]
public interface IBase
{
[OperationContract]
List<short> GetShorts();
}
もちろん、私は継承インターフェースを持っています:
[ServiceContract]
public interface IUseful : IBase
{
[OperationContract]
List<MyObject> GetMyObjects(MyInput input);
}
追加のセットアップなしでサービスを呼び出す簡単な方法を提供するために、インターフェイスの汎用インターセプターとして機能するクラスがあります。
public class ServiceInvoker<T> : DynamicObject, IInterceptor
where T : class
{
// ...
public T Client { get { return (dynamic)this; } }
// ...
}
を実装する任意のサービスを呼び出せるようにしたいIBase
ので、次のようなクラスがあります。
public class BaseCaller
{
private readonly IBase _base;
public BaseCaller(IBase base) { _base = base; }
public List<short> GetShorts() { return _base.GetShorts(); }
}
BaseCaller
私は基本的に次のように構築します:
var si = new ServiceInvoker<IUseful>();
var bc = new BaseCaller(si.Client);
問題は、私が電話をかけGetShorts
、それが呼び出すときに発生します_base.GetShorts
:
MissingMethodException
メソッド 'MyApp.IUseful.GetSubNumbers' が見つかりません。
にカーソルを合わせると_base
、インターセプターが表示され、それが存在することがわかりtoken_GetSubNumbers
ます。キャスト_base
して正常IUseful
に呼び出すことができます。GetMyObjects
私はちょうど呼び出すことができませんGetShorts
。Castle は を実装していないようIBase
です。私は何か間違ったことをしていますか?