2013-09-16 3 views
0

У меня есть служба WCF с большим интерфейсом. Клиентское решение имеет библиотеку классов, которая использует эту службу, но только один метод + один контракт с данными. Я не хочу ссылку на службу в этом проекте библиотеки классов, но вместо этого только в основном проекте.Зависимость Инъекция без полного интерфейса

Я добавил интерфейс к этой библиотеке классов, в которой есть только те элементы, которые мне нужны. Затем я выставляю метод, который принимает параметр «клиент» объекта типа, который я передал этому интерфейсу. Всякий раз, когда я запускаю его, я получаю «неспособность бросить». Я думаю, это связано с тем, что на интерфейсе на клиенте отсутствует множество методов.

Я посмотрел библиотеку Ninject для WCF https://github.com/cyanfish/Ninject.Extensions.Wcf.Client, но предполагает, что вы включили весь интерфейс из серверного решения. Я не хочу этого делать, потому что он имеет другие несвязанные зависимости, и я хочу, чтобы эта библиотека классов была чистой. Я мог бы также, чтобы основной проект в клиенте обрабатывал вызовы служб и передавал результаты в библиотеку классов, но этот вид побеждает цель его устранения.

Есть ли у меня другие возможности?

ответ

1

Вы можете сделать объект реализовать два различных интерфейса, еще один комплекс, чем другие, и просто зарегистрировать тип вам нужно на контейнере МОК, как это:

public class ImplementationObject: IComplexObject, ISimpleObject 
    { 
     public ImplementationObject(){} 

     public string HelloWorld(string name) 
     { 
      return string.Format("Hello {0}!", name); 
     } 
    } 

    public interface IComplexObject 
    { 
     string HelloWorld(string name); 
    } 

    public interface ISimpleObject 
    { 
     string HelloWorld(string name); 
    } 
+0

Я не считал, что вариант, однако, если мне нужно изменить внешний интерфейс, мне может быть лучше разогнать этот единственный метод на отдельной конечной точке svc и сделать таким образом меньший интерфейс. – wtjones

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