У меня есть базовый интерфейс, который наследуется несколькими другими интерфейсами. Этот интерфейс содержит один метод:Замок динамический прокси, не создающий реализацию для метода унаследованного интерфейса
[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
. Похоже, что замок не реализует IBase
. Я делаю что-то неправильно?
Конфигурация замка? – giammin
@giammin: Нет, так что я думаю, что по умолчанию? – zimdanen