2015-04-03 2 views
1

Я хочу использовать Agatha RRSL с моей реализацией оболочки StructureMap 3.0 для контейнера IoC Agatha. У Agatha есть пакеты NuGet с StructureMap 2.6, которые мне не нравятся.Agatha RRSL и StructureMap 3.0

Я начал с копирования/вставки кода из 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 и Агата, так что я, возможно, не поняли или все вышеперечисленное ...

ответ

3

Я никогда не использовал SelectConstructor, так что не знаю, как сделать она работает с ним, но если вы хотите сделать SM использовать конструктор без параметров, то вы можете сделать это, как это, когда вы решить конкретный тип:

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

или как это, когда вы ее решения с помощью интерфейса:

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

Я вообще не знаком с Агатой RRSL, поэтому не знаю, пользовался ли я хорошим интерфейсом.

Надеюсь, это поможет!