Зарегистрируйте все контроллеры в программе Castle Windsor со всех сборок - PullRequest
4 голосов
/ 06 августа 2009

Я использую этот код ...

        container.Register(
            AllTypes
            .FromAssembly(Assembly.Load("MyNamespace.Dashboard"))
            .BasedOn<IController>()
            .Configure(component => component.LifeStyle.Transient
            .Named(ControllerNameFromType(component.Implementation)))
            );

... чтобы зарегистрировать мои контроллеры в контейнере, но я хотел бы иметь возможность зарегистрировать все контроллеры из всех сборок, чтобы сделать вещи более подключаемыми. Я думал, что код ниже должен работать, но это не так?

        Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();

        foreach (var assembly in assemblies) {
            container.Register(
                AllTypes
                .FromAssembly(assembly)
                .BasedOn<IController>()
                .Configure(component => component.LifeStyle.Transient
                .Named(ControllerNameFromType(component.Implementation)))
                );
        }

1 Ответ

0 голосов
/ 10 августа 2010

Проверьте сборки, чтобы увидеть, загружены ли все сборки.

Сделайте что-нибудь подобное, если нет:

        foreach (string dllPath in Directory.GetFiles(directoryPath, "*.dll"))
        {
            try
            {
                Assembly a = Assembly.ReflectionOnlyLoadFrom(dllPath);
                if (Matches(a.FullName) && !loadedAssemblyNames.Contains(a.FullName))
                {
                    App.Load(a.FullName);
                }
            }
            catch (BadImageFormatException ex)
            {
                Trace.TraceError(ex.ToString());
            }
        }
...