sách gpt4 ai đã đi

.net - 不支持具有 null 或空名称的模块。忍者

In lại 作者:行者123 更新时间:2023-12-01 01:04:46 26 4
mua khóa gpt4 Nike

在我们的 MVC 项目中,我们广泛使用 Ninject。由于未知原因,StandardKernel 开始抛出 NotSupportedException 并显示消息“不支持具有 null 或空名称的模块”。这是代码:

        var _kernel = new StandardKernel(); // <-- this line throws exception
_kernel.Bind().ToMethod(x =>
{
// some code...
}).InSingletonScope();
_kernel.Bind().To();

有人知道可能出了什么问题吗?谢谢。

附言这是用于查看程序集版本的 nuget 配置
    



这是堆栈跟踪
  at Ninject.KernelBase.Load(IEnumerable`1 m) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:line 207
at Ninject.KernelBase.Load(IEnumerable`1 assemblies) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:line 245
at Ninject.Modules.CompiledModuleLoaderPlugin.LoadModules(IEnumerable`1 filenames) in c:\Projects\Ninject\ninject\src\Ninject\Modules\CompiledModuleLoaderPlugin.cs:line 82
at Ninject.Modules.ModuleLoader.LoadModules(IEnumerable`1 patterns) in c:\Projects\Ninject\ninject\src\Ninject\Modules\ModuleLoader.cs:line 60
at Ninject.KernelBase.Load(IEnumerable`1 filePatterns) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:line 236
at Ninject.KernelBase..ctor(IComponentContainer components, INinjectSettings settings, INinjectModule[] modules) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:line 97
at Ninject.KernelBase..ctor(INinjectModule[] modules) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs:line 57
at Ninject.StandardKernel..ctor(INinjectModule[] modules) in c:\Projects\Ninject\ninject\src\Ninject\StandardKernel.cs:line 46
at TradeNet.Web.MvcApplication.CreateKernel() in c:\Users\dpopiashvili.DEA\Documents\Visual Studio 2010\Projects\TradeNet\TradeNet.Web\Global.asax.cs:line 65
at Ninject.Web.Common.Bootstrapper.Initialize(Func`1 createKernelCallback) in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\Bootstrapper.cs:line 50
at Ninject.Web.Common.NinjectHttpApplication.Application_Start() in c:\Projects\Ninject\Ninject.Web.Common\src\Ninject.Web.Common\NinjectHttpApplication.cs:line 80

1 Câu trả lời

创建 StandardKernel 时如果 LoadExtensions属性(property)是ĐÚNG VẬY (这是默认值)NinjectSettings类然后 Ninject 将扫描应用程序目录以从扩展 dll 加载模块.

默认情况下,它搜索以下模式:

"Ninject.Extensions.*.dll",
"Ninject.Web*.dll"

并加载所有 INinjectModule从找到的dll中实现。

在您的情况下,此自动模块加载过程会引发异常,因为已加载模块的 Name 之一属性是 vô giá trị .

这可能在两种情况下发生:
  • Ninject 加载了一个显式实现 INinjectModule 的模块。并返回 vô giá trị作为源自 NinjectModule 的名称或模块但覆盖了默认 Name执行并返回 vô giá trị
  • 或默认 Name NinjectModule 中的实现返回 vô giá trị ... 然而这就是 mã nguồncủaName看起来像:
    public virtual string Name
    {
    get { return GetType().FullName; }
    }

    所以它只返回 vô giá trịnếu như Type.FullNametrở lại vô giá trị这可能会发生in very rare cases.

  • 因此,要解决您的问题,您需要找出哪个扩展/模块具有 Name空值:
  • Bạn có thể sử dụng fusion log 检查加载的 Ninject/Extension dll确保您正在加载正确的
  • 您可以尝试捕捉 new StandardKernel()并注销加载的模块
     thử
    {
    _kernel = new StandardKernel();
    }
    nắm lấy
    {
    var modules =
    AppDomain.CurrentDomain.GetAssemblies()
    .SelectMany(a => a.GetExportedTypes()
    .Where(t => typeof(INinjectModule).IsAssignableFrom(t)))
    .ToArray();
    }

  • 直到你找出哪个 INinjectModule导致问题你可以关闭自动扩展加载并手动加载 MvcModule
    var _kernel = new StandardKernel(
    new NinjectSettings() { LoadExtensions = false }, new MvcModule());

    关于.net - 不支持具有 null 或空名称的模块。忍者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19765518/

    26 4 0
    行者123
    Hồ sơ cá nhân

    Tôi là một lập trình viên xuất sắc, rất giỏi!

    Nhận phiếu giảm giá Didi Taxi miễn phí
    Mã giảm giá Didi Taxi
    Giấy chứng nhận ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com