1

親の型に基づいて、コンストラクター引数を条件付きで StructureMap に提供したいと思います。以下のコードでこれを達成しようとしています。

具象型 ProcessorSettings は、TypeOne と TypeTwo の両方に対するコンストラクター引数です。ProcessorSettings のコンストラクターは、「frequency」という名前の 1 つの 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 に答える