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>() 中的对象工作。我想在我有两个原始参数的情况下,我不能使用 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,您可以在那里使用它,但您需要从 Registry 派生并在初始化时配置该注册表:http: //structuremap.sourceforge.net/RegistryDSL.htm

于 2009-05-03T18:06:22.823 回答