Замок Виндзор не может найти установщиков в сборках - PullRequest
11 голосов
/ 04 февраля 2012

У меня есть код в моем global.axax:

protected void Application_Start()
{
    WindsorContainer = new WindsorContainer();
    WindsorContainer.Install(FromAssembly.InDirectory(new AssemblyFilter(AppDomain.CurrentDomain.RelativeSearchPath)));
    ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(WindsorContainer.Kernel));
//...
}

Когда я отлаживаю global.asax, код FromAssembly.InDirectory(newAssemblyFilter(AppDomain.CurrentDomain.RelativeSearchPath)) находит все dll моего проекта (есть 7 dll). 3 из них содержат реализацию интерфейса IWindsorInstaller, например:

class WindsorInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        var services = AllTypes.FromThisAssembly().Where(type => type.Name.EndsWith("Service"));
        container.Register(services
            .WithService.DefaultInterfaces()
            .Configure(c => c.LifestyleTransient()));
        container.Register(Component.For<ISession>().ImplementedBy<AspnetSession>().
            LifeStyle.Transient);
        container.Register(Component.For<ICache>().ImplementedBy<AspnetCache>().
            LifeStyle.Transient);
    }
}

Но когда я устанавливаю точки останова, вызывается только 1 установщик, 2 других пропускаются. Забавно, но у меня есть другой рабочий проект, из которого я скопировал код.

1 Ответ

14 голосов
/ 05 февраля 2012

Ваш класс установщика должен быть публичным.Ваш текущий класс установщика не имеет модификатора доступа, поэтому по умолчанию internal - и невидим для Виндзора.Документы Замка указывают это здесь: https://github.com/castleproject/Windsor/blob/master/docs/installers.md.

...