Изменяемый конст? Виртуальный статик? Как выкрутиться?
От: Mr.Delphist  
Дата: 26.08.16 11:09
Оценка:
Коллеги, прошу совета — у меня глаз замылился, похоже

Есть вот такой код, по сути копипаста с небольшими вариациями, но с тенденцией к разрастанию количества экземпляров.
public void ValidateFoo()
{
  var item = _factory.FirstOrDefault(x => x.UName == Foo.UniqueName);
  if (item == null)
  {
    _factory.Register<Foo>(new FactoryRecord
    {
      UName = Foo.UniqueName,
    });
  } else {
    // всякий Foo-специфичный код, можно вытащить в лямбду, Action и т.п.
  }
}

public void ValidateBar()
{
  var item = _factory.FirstOrDefault(x => x.UName == Bar.UniqueName);
  if (item == null)
  {
    _factory.Register<Bar>(new FactoryRecord
    {
      UName = Bar.UniqueName,
    });
  } else {
    // всякий Bar-специфичный код, можно вытащить в лямбду, Action и т.п.
  }
}


Хочется пресечь это на корню и написать Validate<T>, параметризуемый нужным типом.
Небольшая засада с самими классами: там есть атрибут, требуемый сторонней либой. Атрибут ссылается на константу из класса
[SomeAttribute(Foo.UniqueName)]
public class Foo
{
  public const string UniqueName = "This is Foo";
  // всякий Foo-специфичный набор полей
}

[SomeAttribute(Bar.UniqueName)]
public class Bar
{
  public const string UniqueName = "This is Bar";
  // всякий Bar-специфичный набор полей
}


Понятное дело, что атрибут хочет именно константу в роли своего параметра, иначе ой. Иначе и вопроса бы не было — накидал бы генерик-метод через интерфейс или что-то такое.

Как выкрутиться и написать Validate<T>?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.