gpt4 book ai didi

Ninject:是否可以加载声明为内部的模块

转载 作者:行者123 更新时间:2023-12-02 16:42:05 25 4
gpt4 key购买 nike

是否可以配置 Ninject 来加载已声明为内部的模块?

我尝试为 Ninject 程序集配置 InternalVisibleTo,但这没有帮助。

我当然可以将模块设为公共(public),但实际上它们应该是内部

最佳答案

内部KernalBase.Load(IEnumerable<Assembly assemblies)使用 GetExportedTypes()它只返回公共(public)类型。

但是,您可以编写自己的“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();

该解决方案尚未经过测试。

关于Ninject:是否可以加载声明为内部的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6454860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com