1

我想根据父类型有条件地为 StructureMap 提供构造函数参数。我正在尝试使用下面的代码来实现这一点。

具体类型 ProcessorSettings 是 TypeOne 和 TypeTwo 的构造函数参数。ProcessorSettings 的构造函数采用一个名为“频率”的 int 参数。

当我尝试这个时,我得到一个 StructureMap 错误StructureMap Exception Code: 202 No Default Instance defined for 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);
    }));
4

1 回答 1

1

尝试使用命名实例而不是条件。如果您有很多变体,您可以创建一个约定来减少重复。

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");
于 2013-01-13T11:59:42.947 回答