Я пытаюсь найти набор компонентов, которые реализуют определенный базовый класс в сборках в том же каталоге, что и мое приложение. Мне нужно сделать это как своего рода архитектуру в стиле плагина, так как мое приложение использует эти типы для заполнения других компонентов.
Ninject.Extensions.Conventions поддерживает сканирование сборок в локальном каталоге, поэтому я решил попробовать.
Проблема в том, что предоставляемые библиотекой генераторы привязки (DefaultBindingGenerator
и RegexBindingGenerator
) будут связывать компоненты только с интерфейсами, которые они реализуют. Они не будут привязываться к неинтерфейсным базовым типам.
Как использовать эту библиотеку для условного связывания с базовым классом, а не с интерфейсом?
Я использую версию, в настоящее время установленную на NuGet - 2.2.0.5
Мой текущий код привязки на основе соглашения выглядит следующим образом:
Kernel.Scan(x =>
{
x.FromAssembliesMatching("*.dll");
x.WhereTypeInheritsFrom<BaseType>();
// I've tried both DefaultBindingGenerator and RegexBindingGenerator
x.BindWith<DefaultBindingGenerator>();
x.InTransientScope();
});
Когда я пытаюсь разрешить компоненты, ничего не возвращается:
var myTypes = Kernel.GetAll<BaseType>();
int count = myTypes.Count(); // Always returns zero