Насколько мне известно, System.Boolean не имеет конструктора, который позволял бы создавать его экземпляры с помощью Activator.CreateInstance.Вам, вероятно, придется использовать Boolean.Parse () или Boolean.TryParse ().
Я не знаю ни одной инфраструктуры ввода-вывода, которая делает то, что вы хотите, но, возможно, вы могли бы просто поработать с предпочитаемой платформойвот так ... (например, используя Autofac ):
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<MyImplTwo>()
.As<MyImplBase>()
.WithParameter("someParam", Boolean.Parse(yourStringHere));
или для типов, которые можно создать с помощью Activator.CreateInstance:
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<MyImplTwo>()
.As<MyImplBase>()
.WithParameter("someOtherParam", Activator.CreateInstance(Type.GetType("TypeName"), new object[] { }));
Редактировать: еще один вариант - расширить структуру DI по вашему выбору и объединить ее с некоторыми функциями сериализации строк.
Например, используя Autofac с Json.NET , мы можем создать метод расширения:
static class AutofacExtensions
{
public static IRegistrationBuilder<TLimit, TReflectionActivatorData, TStyle>
WithSerializedParameter<TLimit, TReflectionActivatorData, TStyle>(
this IRegistrationBuilder<TLimit, TReflectionActivatorData, TStyle> registration,
string parameterName,
string typeName,
string value)
where TReflectionActivatorData : ReflectionActivatorData
{
return registration.WithParameter(parameterName, JsonConvert.DeserializeObject(value, Type.GetType(typeName)));
}
}
И использовать метод расширения следующим образом:
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<MyImplTwo>()
.As<MyImplBase>()
.WithSerializedParameter("someParam", "System.Boolean", "true");