Прежде всего, почему у вас один и тот же класс в двух разных пространствах имен?
Я бы создал магическую функцию вроде:
public static T GetInHeaderProperty<T>(Func<T> createObjFunc)
{
T result = createObjFunc();
dynamic resultAsDynamic = result as dynamic;
resultAsDynamic.CompanyId = "Test";
resultAsDynamic.UserId = "Test";
resultAsDynamic.Password = "Test";
resultAsDynamic.MessageId = " ";
return (T)result;
}
Это может сработать, но я не уверен, что рекомендую это. У вас могут быть другие проблемы с кодом, вынуждающие вас делать такие вещи, которые вы должны сначала исправить.
ОБНОВЛЕНИЕ: Я сделал предположение, что нельзя заставить объекты наследовать один и тот же интерфейс. Если они могут, вы определенно не должны использовать код выше, если они могут, вы должны использовать код ниже:
public static T GetInHeaderProperty<T>() where T : ISomeType, new()
{
T result = new T();
result.CompanyId = "Test";
result.UserId = "Test";
result.Password = "Test";
result.MessageId = " ";
return result;
}