Wewnętrznie KernalBase.Load(IEnumerable<Assembly assemblies)
używa GetExportedTypes()
, który zwraca tylko typy publiczne.
Można jednak napisać własny "skaner NinjectModule".
public static class NinjectModuleScanner
{
public static IEnumerable<INinjectModule>
GetNinjectModules(IEnumerable<Assembly assemblies)
{
return assemblies.SelectMany(assembly => assembly.GetNinjectModules());
}
}
public static class AssemblyExtensions
{
public static IEnumerable<INinjectModule>
GetNinjectModules(this Assembly assembly)
{
return assembly.GetTypes()
.Where(IsLoadableModule)
.Select(type => Activator.CreateInstance(type) as INinjectModule);
}
private static bool IsLoadableModule(Type type)
{
return typeof(INinjectModule).IsAssignableFrom(type)
&& !type.IsAbstract
&& !type.IsInterface
&& type.GetConstructor(Type.EmptyTypes) != null;
}
}
Następnie można wykonać następujące czynności.
var modules = NinjectModuleScanner.GetNinjectModules(assemblies).ToArray();
var kernel = new StandardKernel();
To rozwiązanie nie zostało jeszcze przetestowane.
działa bardzo dobrze, nie myślał o zbliża go tak jak ja szukałem czegoś zbudowany dzięki.. –