Коллеги, прошу совета — у меня глаз замылился, похоже
Есть вот такой код, по сути копипаста с небольшими вариациями, но с тенденцией к разрастанию количества экземпляров.
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>?