我想基于父类型有条件地为StructureMap提供构造函数参数。 我试图用下面的代码实现这一点。
具体类型ProcessorSettings是TypeOne和TypeTwo的构造函数参数。 ProcessorSettings的构造函数接受一个名为“frequency”的int参数。
当我尝试这个时,我得到一个StructureMap错误 StructureMap异常代码:202 没有为PluginFamily定义默认实例。错误消息中没有更多信息。
x.ForConcreteType<ProcessorSettings>()
.Configure.Ctor<int>("frequency")
.Is(condition => condition.Conditional(y =>
{
y.If(t => t.ParentType == typeof(TypeOne))
.ThenIt.Is.IsThis(intVal1);
y.If(t => t.ParentType == typeof(TypeTwo))
.ThenIt.Is.IsThis(intVal2);
}));
答案 0 :(得分:1)
尝试使用命名实例而不是条件实例。如果您有许多变体,可以创建Convention以减少重复。
x.For<ProcessorSettings>().Add<ProcessorSettings>().Ctor<int>("frequency")
.Is(intVal1).Named("ProcessorSetting1");
x.For<ProcessorSettings>().Add<ProcessorSettings>().Ctor<int>("frequency")
.Is(intVal2).Named("ProcessorSetting2");
x.For<IType>().Add<TypeOne>().Ctor<ProcessorSettings>()
.Named("ProcessorSetting1");
x.For<IType>().Add<TypeTwo>().Ctor<ProcessorSettings>()
.Named("ProcessorSetting2");