1

ich jsut bin mit den Grundlagen von StructureMap (IOC) in den Griff bekommen und ich versuche, die Demo von Brighter intergrate die hierIntergrating (ian Küfer) Brighter mit StructureMap

https://iancooper.github.io/Paramore/QuickStart.html

Mit Structuremap gefunden werden kann innerhalb eines MVC-Projekts.

Das Problem das ich habe, arbeitet heraus, was in der Structuremap Objekt Fabrik auf Build zu passieren, es kehrt

ich derzeit

An exception of type 'System.ArgumentOutOfRangeException' occurred in StructureMap.dll but was not handled in user code 

Additional information: Specified argument was out of the range of valid values. 

Fabrik Handler

public class SimpleHandlerFactory : IAmAHandlerFactory 
    { 
     public IHandleRequests Create(Type handlerType) 
     { 
      return new GreetingCommandHandler(); 
     } 

     public void Release(IHandleRequests handler) 
     { 

     } 
    } 
die folgenden Fehler haben

Der CommandHandler

public class GreetingCommandHandler : RequestHandler<GreetingCommand> 
    { 
     public override GreetingCommand Handle(GreetingCommand command) 
     { 
      Debug.Print("This is the trace for the command : {0}", command.Name); 
      return base.Handle(command); 
     } 
    } 

Und meine Structuremap Abhängigkeit Scope

public IHandleRequests<T> GetExecutorFor<T>() where T : class, IRequest 
     { 
      return this.Container.GetAllInstances<IHandleRequests<T>>().FirstOrDefault(); // GetInstance() throws exception if more than one found 
     } 

und dann auf dem IoC.cs

public static IContainer Initialize() { 
     ObjectFactory.Initialize(x => 
        { 
         x.Scan(scan => 
           { 
            scan.TheCallingAssembly(); 
            scan.WithDefaultConventions(); 
           }); 
        // x.For<IHandleRequests<IRequest>>().Use<IHandleRequests<IRequest>>(); 
// So this is where I was going wrong I should of been doing 
x.For<IHandleRequests<GreetingCommand>>().Use<GreetingCommandHandler>(); 
        }); 
     return ObjectFactory.Container; 
    } 

Vielen Dank im Voraus,

Martyn

Antwort

1

GreetingCommandHandler beheben können Sie sich registrieren müssten das ist in Ihrem IContainer speziell, weil es nicht mit DefaultConventions auflösen wird.

For<IHandleRequests<GreetingCommand>().Use<GreetingCommandHandler>(); 

Sollte für Sie arbeiten.

Für alle anderen konkreten Implementierungen müssten Sie das gleiche tun.

+0

Perfect @pedro das ist genau das, was benötigt wurde,: D war nach einem langen Wochenende nur ein bisschen dick –