Почему типы из сборок не могут быть решены Замок Виндзор - PullRequest
2 голосов
/ 17 апреля 2019

Виндзорский замок не может разрешить любой тип после регистрации их сборкой

Я пытаюсь реализовать службу, которая сканирует текущую библиотеку для всех расширений .ddl, а затем регистрирует их сборкой в ​​замке Виндзор, но когдаЯ пытаюсь разрешить. Исключение выдается с сообщением: «Нет компонента для поддержки службы».Если я перебираю Kernel.GetAssignableHandlers, я вижу, что все типы зарегистрированы.

1.получить корневое имя сборки:

var delimiterIndex = assembly.FullName.IndexOfAny(new[] { '.' });

2.Получить все сборки в виде массива

return Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory, "*.*", SearchOption.AllDirectories)
                       .Where(x => Path.GetExtension(x).Equals(".dll", StringComparison.InvariantCultureIgnoreCase))
                         .Where(x => Path.GetFileName(x)
                            .StartsWith(rootAssemblyName, StringComparison.InvariantCultureIgnoreCase)).Select(Assembly.LoadFile).ToArray();

3.Зарегистрируйте каждую сборку в контейнере Виндзорского замка

Classes.FromAssembly(assembly).Pick().WithServiceBase().WithServiceAllInterfaces().WithServiceSelf().LifestyleTransient()

4.Resolve

var instance = _container.Resolve<IFoo>();

При разрешении выдается «ComponentNotFoundException» с сообщением:

'Нет компонента для поддержки службы Mes.Utils.DBUpgrade.IDBUpgraderбыл найден '

1 Ответ

1 голос
/ 25 апреля 2019

Мне так и не удалось найти фактическую ошибку в реальном коде, но Кшиштоф Козьмич предложил использовать Classes.FromAssemblyNamed вместо Classes.FromAssembly, что прекрасно работает: D

, поэтому изменения, внесенные в исходный код, сравниваютсято, что показано в разделе 3, выглядит следующим образом: Classes.FromAssemblyNamed(assembly.FullName).Pick().WithServiceBase().WithServiceAllInterfaces().WithServiceSelf().LifestyleTransient().

Я думаю, что проблема как-то заключалась в том, как я загружал сборки, но Castle Windsor удалось загрузить их, вероятно,

Спасибовсе ответы и обсуждение в комментариях: D

...