Вот то, что я до сих пор:Как вернуть тип, неизвестный во время компиляции?
public static object For<T>()
{
var builderName = typeof(T).Name + "Builder";
var type = Type.GetType(builderName);
var builder = Activator.CreateInstance(type);
return builder;
}
И это не ошибка или что-нибудь, но проблема в том, когда я называю его:
var builder = Builder.For<MyModel>();
, а затем попытаться вызвать его методы :
builder.WithAnything()
Она ошибки, потому что тип возвращаемого значения метода является просто объектом, а не тип, который был построен в рамках метода.
Целью этого является своего рода есть завод, который производит «Строители» (которые следуют свободно шаблон строитель) - и пытается создать некоторый синтаксический сахар, так что я не должен делать это:
(new MyModelBuilder())
.WithParameter(2)
.WithAnother(3)
.Build();
по крайней мере, я нравится внешний вид этого гораздо лучше (так что это еще не чтобы быть достигнутой цели):
Builder.For<MyModel>()
.WithParemeter(2)
.WithAnother(3)
.Build();
Может ли это быть сделано в C#?
Может быть что-то с [ 'dynamic' ключевым словом] (https://msdn.microsoft.com/en-us/library/dd264736.aspx)? –
Кажется, что соотношение цены и стоимости не подходит для этого. – flq
Являются ли методы всех строителей одинаковыми методами? Так что все строители поддерживают. 'WithParameter()'/'WithAnother()' или существуют специальные методы для конкретных сборщиков, например 'WithParameterOfFooBuilder()'/'WithParameterOfBarBuilder()' – xanatos