Agatha RRSL和StructureMap 3.0

时间:2015-04-03 14:42:57

标签: structuremap agatha-rrsl

我想使用Agatha RRSL实现我对Agatha的IoC容器的StructureMap 3.0包装器的实现。 Agatha有我不喜欢的StructureMap 2.6的NuGet包。

我首先从Agatha.StructureMap source code复制/粘贴代码,然后继续进行更改以使用3.0 StructureMap。

我现在遇到的问题是我得到了一个StructureMapException

StructureMap.StructureMapBuildPlanException occurred
  _HResult=-2146233088
  _message=Unable to create a build plan for concrete type Agatha.Common.WCF.RequestProcessorProxy
  HResult=-2146233088
  IsTransient=false
  Message=Unable to create a build plan for concrete type Agatha.Common.WCF.RequestProcessorProxy

new RequestProcessorProxy(InstanceContext, String endpointConfigurationName, String remoteAddress)
  ┗ InstanceContext = **Default**
                  String endpointConfigurationName = Required primitive dependency is not explicitly defined
                  String remoteAddress = Required primitive dependency is not explicitly defined



  Source=StructureMap
  Context=new RequestProcessorProxy(InstanceContext, String endpointConfigurationName, String remoteAddress)
  ┗ InstanceContext = **Default**
                  String endpointConfigurationName = Required primitive dependency is not explicitly defined
                  String remoteAddress = Required primitive dependency is not explicitly defined

  Title=Unable to create a build plan for concrete type Agatha.Common.WCF.RequestProcessorProxy
  StackTrace:
       at StructureMap.Pipeline.ConstructorInstance`1.ToBuilder(Type pluginType, Policies policies) in c:\BuildAgent\work\996e173a8ceccdca\src\StructureMap\Pipeline\ConstructorInstance.cs:line 83
  InnerException: 

这看起来好像构造函数StructureMap认为它需要使用,但视图没有正确配置,是具有多个参数的视图。实际上我需要它来使用无参数构造函数。

但是我认为我已经正确配置了构造函数。这是我用来为RequestProcessorProxy配置无参数构造函数的代码:

 structureMapContainer.Configure(x => x.ForConcreteType<RequestProcessorProxy>().Configure.SelectConstructor(() => new RequestProcessorProxy()));

可能出了什么问题?

就像抬头一样,我是StructureMap和Agatha的新手所以我可能误解了上述任何一个或全部...

1 个答案:

答案 0 :(得分:3)

我从未使用SelectConstructor所以不知道如何使用它,但是如果你想让SM使用无参数构造函数,那么你可以在解决具体类型时这样做:< / p>

var container =
    new Container(
        c => c.For<RequestProcessorProxy>().Use(() => new RequestProcessorProxy()));
当你通过界面解析它时,

或者像这样:

var container =
    new Container(
        c => c.For<IRequestProcessor>().Use(() => new RequestProcessorProxy()));

我根本不熟悉Agatha RRSL所以我不知道我是否使用了良好的界面。

希望这有帮助!