2013-10-24 2 views
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:

MissingMethodException

Метод «MyApp .IUseful.GetSubNumbers 'не найдено.

Когда я парить над _base, я могу видеть перехватчик, и я могу видеть, что token_GetSubNumbers существует. Я могу сделать _base по номеру IUseful и позвонить по телефону GetMyObjects; Я просто не могу позвонить GetShorts. Похоже, что замок не реализует IBase. Я делаю что-то неправильно?

+0

Конфигурация замка? – giammin

+0

@giammin: Нет, так что я думаю, что по умолчанию? – zimdanen

ответ

0

Это, кажется, работает, так что происходит с ним, если кто-то не дает лучшее решение:

Я удалил Наследование из IBase и просто использовать его непосредственно с ServiceInvoker<IBase>. Теперь услуги должны реализовать непосредственно IBase и выставить для нее конечную точку, но она работает.

Смежные вопросы