2011-01-02 2 views
0

Ich versuche, ein Objekt (Kontextklasse) aufzulösen, die eine Konstruktorabhängigkeit von einem IList hat, aber ich kann nicht auflösen (siehe Ausnahme unten). Kann jemand erklären, warum das ist? Gibt es ein Problem mit den generischen Ausnahmen von Castle und .net? Vielen Dank für die AntwortenProblem mit der Auflösung eines Typs in Schloss, die auf IList

public class Context : IContext 
    { 

     public Context(
      IApplicationSite applicationSite, 
      IList<Currency> currencies) 
     { 
     } 
    } 

Und das ist meine IOC Anmeldung:

var _container = new WindsorContainer(); 

_container.Kernel.AddFacility<FactorySupportFacility>();    

    _container.Register(
    Component.For<IRepository>() 
    .ImplementedBy<Repository>() 
    .Named("repository")); 

_container.Register(
    Component 
    .For<IList<Currency>>() 
    .UsingFactoryMethod(kernel => kernel.Resolve<IRepository>().GetCurrencies()) 
    .Named("currencies")); 

_container.Register(
    Component 
    .For<IApplicationSite>() 
    .UsingFactoryMethod(kernel => kernel.Resolve<IRepository>().GetApplicationSite()) 
    .Named("applicationSite")); 

_container.Register(
    Component.For<IContext>() 
    .ImplementedBy<Context>() 
    .Named("Context")); 

var _context = _container.Resolve<IContext>(); 

Wenn ich versuche, Kontext zu lösen ich die folgende Ausnahme erhalten:

Castle.MicroKernel.Resolvers.DependencyResolverException : Could not resolve non-optional dependency for 'Context' (ClassLibraryCastle.Context). 
Parameter 'currencies' type 'System.Collections.Generic.IList`1[[ClassLibraryCastle.Currency, ClassLibraryCastle, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' 
+0

Es ist alles erklärt [in den FAQ] (http://stw.castleproject.org/Windsor.FAQ.ashx#Why_is_Windsor_not_able_to_inject_array_or_list_of_components_8). –

Antwort

0

ich eine Methode zur Lösung gefunden haben eine Abhängigkeit von IList - unter Verwendung von dyanamischen Parametern

_container.Register(
    Component.For<IContext>() 
     .ImplementedBy<Context>() 
     .Named("context") 
     .DynamicParameters((k, parameters) => // dynamic parameters 
     { 
      parameters["currencies"] = k.Resolve<IList<Currency>>(); 
     })); 
Verwandte Themen