Как я могу использовать внутренние конструкторы в публичных контрактах данных? - PullRequest
1 голос
/ 02 сентября 2010

У меня есть несколько классов контрактов данных, таких как:

[DataContract]
public class FooData
{
    [DataMember]
    public string Name;

    // ... many more members

    public FooData (string name) // again, many more arguments
    {
        Name = name;
        // ...
    }
}

Поскольку FooData всегда используется для транспортировки объектов Foo по проводам, я хотел бы добавить конструктор, который принимает объект Foo и устанавливает все поля соответственно вместо того, чтобы делать это вручную (new FooData (myFoo.Name)).

Однако для этого пользователю FooData необходимо включить тип Foo, который должен быть внутренним по отношению к серверу. Обычно эту проблему можно было бы решить, если бы конструктор принял Foo внутри, но в моем случае FooData находится в сборке, отличной от Foo.

Как мне с этим бороться? Мои мысли до сих пор включают использование интерфейса вместо класса для передачи данных или использование «конструктора расширения». Есть идеи получше?

1 Ответ

1 голос
/ 02 сентября 2010

Включение типа Foo в конструктор не должно быть проблемой, если вы не предоставляете этот тип в открытом свойстве, помеченном DataMember. WCF позаботится о сериализации только свойств, помеченных с помощью DataMember, чтобы вы могли использовать типы серверов для внутреннего использования в контракте данных. Однако клиент не сможет увидеть тот конструктор, который получает тип «Foo», поэтому ему придется установить все данные в контракте вручную

Спасибо Пабло.

...