#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. Смотрите мой другой ответ для получения более подробной информации.