Проблема с разрешением типа в замке, который зависит от IList - PullRequest
0 голосов
/ 02 января 2011

Я пытаюсь разрешить объект (класс Context), который имеет зависимость конструктора от IList, но не могу разрешить (см. Исключение ниже) Кто-нибудь может объяснить, почему это? Есть ли проблема с универсальными исключениями для Castle и .net? Спасибо за ответы

public class Context : IContext
    {

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

А это моя регистрация в МОК:

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>();

Когда я пытаюсь разрешить контекст, я получаю следующее исключение:

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]]'

1 Ответ

0 голосов
/ 10 января 2011

Я нашел способ разрешения зависимости от IList - с использованием параметров dyanamic

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