我有一个由其他几个接口继承的基本接口。这个接口有一个方法:
[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
:
缺少方法异常
找不到方法“MyApp.IUseful.GetSubNumbers”。
当我将鼠标悬停在 上时_base
,我可以看到拦截器,并且可以看到它的token_GetSubNumbers
存在。我可以成功施法_base
并IUseful
调用GetMyObjects
;我就是不能打电话GetShorts
。看起来 Castle 没有实施IBase
. 难道我做错了什么?