0

我有一个由其他几个接口继承的基本接口。这个接口有一个方法:

[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存在。我可以成功施法_baseIUseful调用GetMyObjects;我就是不能打电话GetShorts。看起来 Castle 没有实施IBase. 难道我做错了什么?

4

1 回答 1

0

这似乎可行,因此除非有人提供更好的解决方案,否则请继续使用:

我删除了 的继承,IBase并直接将其与ServiceInvoker<IBase>. 服务现在必须IBase直接实现并为其公开一个端点,但它可以工作。

于 2013-10-24T19:43:19.410 回答