В основном, как гласит заголовок:
[DataContract(Name = "{0}Item")] //This will format properly
public class GenericItem<T>
{
[DataMember(Name = "The{0}")] //This will NOT format properly
public T TheItem { get; set; }
}
[CollectionDataContract(Name = "{0}Items")] //This will format properly
public SpecialCollection<T> : Collection<T> { }
[ServiceContract(Name = "{0}Service")] //This will NOT format properly
public interface IGenericService<T>
{
[OperationContract(Name = "Get{0}")] //This will NOT format properly
GenericItem<T> Get<T>();
}
Итак, у вас есть ... что работает и не работает ... но вопрос ... почему? Очевидно, что .NET способен создавать конкретный тип и форматировать имя при использовании DataContract
и CollectionDataContract
и указание типа (то есть GenericItem<Foo>
или SpecialCollection<Foo>
. Так почему бы не DataMember
также иметь возможность форматирования?
ServiceContract/OperationContract
Я могу в некотором роде понять, как это было описано выше (сортировка), но я не понимаю, когда вы придаете ему конкретный тип, операции все равно не будут работать должным образом:
[ServiceContract(Name = "FooService")]
public interface FooService : IGenericService<Foo> { }
public interface IGenericService<T>
{
[OperationContract(Name = "Get{0}")] //This will NOT format properly
T Get<T>();
}
Опять же, почему ? Очевидно, что здесь я объявляю конкретный тип Foo, что означает, что IGenericService является IGenericService , поэтому не следует ли форматировать имя OperationContract, поскольку оно ЗНАЕТ тип?
Обновление:
Я только что вспомнил, почему я расстроился из-за того, что не смог использовать универсально отформатированный ServiceContract ... когда у меня есть реализация службы, я даю ей конкретный тип ...
//See! I gave it a concrete type to go by!
[ServiceBehavior(...)]
public class MyService : IGenericService<Foo> { ... }
Я создал для этого Microsoft Connect запрос. Пожалуйста, подпишите его, если вы хотите эту функцию для других атрибутов. http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2327048-enable-generics-for-datamemberattribute-serviceco