1

クラスの次のCTORがあります。

public class Log : ILog {
   ...
   public Log (string file, string flag) { .... }

   ....
}

次のコードを試して、DIマッピングを作成しました。

public MyStructureMap {

    public void static InitializeMapping() {
       StructureMap.DSL.Registiry.ForRequestedType<ILog>().TheDefault.Is
          .OfConcreteType<Log>().WithCtorArg("file").EqualTo(@"C:\tmp\log.txt");
       StructureMap.DSL.Registiry.ForRequestedType<ILog>().TheDefault.Is
          .OfConcreteType<Log>().WithCtorArg("flag").EqualTo(@"debug");
    }
 ....
}

ObjectFactory.GetInstance <ILog>()からオブジェクトを機能させることができませんでした。私の場合、2つのプリミティブパラメーターがある場合、WithCtorArg()を使用してパラメーターを一致させることはできないと思います。そうですか?マッピングを登録する最良の方法は何ですか?

4

2 に答える 2

3

私は今日StructureMapで作業を開始し、あなたの質問を見つけたとき、StackOverflowで他の何かの答えを探していました。あなたの質問は少し古いですが、あなたが答えを得られなかった場合のために、ここに行きます:

複数のプリミティブパラメータを使用できます。流暢なインターフェースを利用するには、構文を変更する必要があります。

public MyStructureMap {

    public void static InitializeMapping() {
       StructureMap.DSL.Registiry.ForRequestedType<ILog>().TheDefault.Is.OfConcreteType<Log>()
          .WithCtorArg("file").EqualTo(@"C:\tmp\log.txt")
          .WithCtorArg("flag").EqualTo(@"debug");
    }
 ....
}
于 2009-07-09T15:42:06.267 に答える
2

いいえ、できます:http ://structuremap.sourceforge.net/InstanceExpression.htm#section5

マッピングを登録する最良の方法は、レジストリDSLを使用することです。ただし、レジストリから派生し、初期化でそのレジストリを構成する必要があります。http: //structuremap.sourceforge.net/RegistryDSL.htm

于 2009-05-03T18:06:22.823 に答える