Добавление типа перечисления, используемого в службе WCF и приложении Windows Phone 7

#wcf #windows-phone-7 #enums #software-design

#wcf #windows-phone-7 #перечисления #программное обеспечение-дизайн

Вопрос:

Я разрабатываю приложение для Windows Phone 7, которое использует службу WCF.

Мне нужно использовать в обоих проектах следующий код:

 public enum GameType
{
    MonoPlayer = 1,
    MultiPlayer = 2
}
  

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

Я думаю, мне нужно использовать третий проект, где я должен поместить enum.

У вас есть лучший подход?

Ответ №1:

WCF использует контракты, поэтому перечисление должно быть оформлено как контракт.

Например, вы можете иметь:

 [DataContract]
public enum GameType
{
    [EnumMember]
    MonoPlayer = 0,

    [EnumMember]
    MultiPlayer = 1
}
  

Вы помещаете этот файл перечисления в отдельный проект, чтобы клиент и служба WCF могли совместно использовать его.

Затем в контракте на обслуживание (т. Е. в интерфейсе вашей службы WCF) вы должны объявить перечисление как «известный тип», например:

 [ServiceContract]
[ServiceKnownType(typeof(GameType))]
public interface IMyService {...}
  

Это должно сработать!

Ответ №2:

Что я обычно делаю, так это создаю отдельный проект, в котором есть все классы и перечисления, имеющие вид логики домена, на который вы ссылаетесь (например, GameType), который является общим для других проектов, и вызываю его: Xpto.Common

Затем я ссылаюсь на этот общий проект в обоих своих проектах. Это делает классы и перечисления многоразовыми и сохраняет порядок.

Ответ №3:

Очевидно, что повторно используемые классы должны быть вынесены в отдельный проект.

Комментарии:

1. И .. могу ли я использовать этот проект на Windows Phone и WCF без каких-либо изменений?

2. Смотрите мой другой ответ для получения более подробной информации.