是否可以配置 Ninject 来加载已声明为的模块internal
?
我尝试过配置InternalVisibleTo
对于 Ninject 组件,但这没有帮助。
我当然可以制作模块public
,但实际上他们应该是internal
.
内部KernalBase.Load(IEnumerable<Assembly assemblies)
使用GetExportedTypes()
它只返回公共类型。
但是,您可以编写自己的“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;
}
}
然后你可以执行以下操作。
var modules = NinjectModuleScanner.GetNinjectModules(assemblies).ToArray();
var kernel = new StandardKernel();
但该解决方案尚未经过测试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)