如何使用 Ninject 注入一些通用的 asp.net http 处理程序?

2023-12-20

我是 Ninject 的新手,我不知道如何注入我的通用 http 处理程序。我有一个 MVC3 项目,我将我的服务注入到控制器中,没有任何问题。 这是我在 Ninject App_start 类中用于注册服务的内容:

        private static void RegisterServices(IKernel kernel)
    {
        kernel.Bind<NLSubscriber.Core.Service.Repository.INLUserRepository>().To<NLSubscriber.Core.Service.Repository.EFDAL.EFNLUserRepository>().InRequestScope();
        kernel.Bind<Neticon.Mvc.Helpers.IConfigHelper>().To<Neticon.Mvc.Helpers.AzureEnabledConfigHelper>().InSingletonScope();
        kernel.Bind<Neticon.Security.Service.IAuthenticationService>().ToMethod(m => Neticon.Security.Service.SecurityServiceFactory.CreateAuthenticationService()).InRequestScope();
        kernel.Bind<Neticon.Security.Service.IMembershipService>().ToMethod(m => Neticon.Security.Service.SecurityServiceFactory.CreateMembershipService()).InRequestScope();
        kernel.Bind<Neticon.Security.Service.IRoleManagerService>().ToMethod(m => Neticon.Security.Service.SecurityServiceFactory.CreateRoleManagerService()).InRequestScope();

当我尝试使用属性注入(使用 [inject] 属性)从通用处理程序获取某些服务时,我总是得到 null。这就是我的处理程序的样子:

    public class SubscriberHandler : IHttpHandler
{
    [Inject]
    public INLUserRepository userRep { get; set;}

    public void ProcessRequest(HttpContext context)
    {
        var users = userRep.GetUsers(); //userRep is always null here
    }


    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

我也尝试过这样做:

    readonly INLUserRepository userRep;

    public SubscriberHandler()
    {

        using (IKernel kernel = new StandardKernel(new App_Start.NJRepositoryModule()))
        {
            userRep = kernel.Get<INLUserRepository>();
        }
    }

但我收到一个异常:“加载 Ninject 组件 ICache 时出错。内核的组件容器中尚未注册此类组件。 建议: 1) 如果您已经为 KernelBase 创建了自定义子类,请确保您已正确 实现了 AddComponents() 方法。 2) 确保您没有通过调用RemoveAll() 从容器中删除组件。 3) 确保您没有意外创建多个内核。”

这表明我不应该在我的应用程序中实例化多个内核,对吧? 我究竟做错了什么? 谢谢


您可以使用依赖解析器:

public class SubscriberHandler : IHttpHandler
{
    public INLUserRepository userRep { get; private set; }

    public SubscriberHandler()
    {
        userRep = DependencyResolver.Current.GetService<INLUserRepository>();
    }

    public void ProcessRequest(HttpContext context)
    {
        var users = userRep.GetUsers(); //userRep is always null here
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

我希望从这个答案中得到负面反馈,因为服务定位器模式被许多人认为是反模式。

但我不确定 NInject 是否允许您对 HTTP 处理程序使用构造函数注入,因为它们是由 ASP.NET 运行时实例化的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Ninject 注入一些通用的 asp.net http 处理程序? 的相关文章

随机推荐

  • Spring Boot JAR - 缺少 EmbeddedServletContainerFactory

    Spring Boot 1 2 7 Web 应用程序 响应 SSL 请求 在 Intellij IDEA 上运行得很好 构建 JAR 工件以从命令行运行 启动时抛出错误 org springframework context Applica
  • Python 2.6 ImportError:没有名为 argparse 的模块

    我尝试从 Red Hat Enterprise Linux Server 版本 6 5 运行 git cola 并收到 Traceback most recent call last File bin git cola line 24 in
  • 将 inputText 值限制为仅字母字符

    我只需要允许字母字符 A Z a z 在 PrimeFaces 输入文本字段中 我怎样才能做到这一点 不特定于 Primefaces 而是特定于底层 JSF 您可以在输入字段上使用正则表达式验证器
  • 在 g++ 上进行聚合初始化的 std::array 会生成大量代码

    在 g 4 9 2 和 5 3 1 上 此代码需要几秒钟的时间来编译并生成 52 776 字节的可执行文件 include
  • 无法在样式中的目标标记上指定事件“LostFocus”。使用 EventSetter 代替

    为什么我会收到此错误消息 我正在使用事件设置器 edit 我没有使用内联样式 它位于资源中 即
  • 调整facet_grid中一条线的线型

    我有一个与此类似的情节 b lt data frame x c 1 2 3 1 2 3 1 2 3 1 2 3 y c 1 2 3 1 5 1 9 2 5 3 2 1 2 9 1 8 1 5 c c 1 1 1 2 2 2 1 1 1 2
  • JavaScript - 预加载图像

    我正在开发一个照片库 我希望能够在加载主图像之前显示 gif 预加载器 然后显示主图像 所以 这就是我得到的 我有一个 photo place这是保存主照片的 div 这会根据用户选择的缩略图而变化 当用户选择缩略图时 会触发此函数 fun
  • Entity Framework Core 忽略 .Include(..) 而不间接忽略 .ToList(..)

    如前所述在 EF Core 文档的 加载相关数据 中 https learn microsoft com en us ef core querying related data我们可以用 Include 立即加载导航属性DbSet 或通用I
  • 无需预处理即可通过子例程实现打印语句的强大功能?

    由于 Fortran 子例程需要声明所有内容 因此我们无法轻松编写具有与print陈述 在整个代码中 我们有 print 语句 每个语句都有多个 if 语句来处理并行处理和所选的调试输出模式 打印许多不同类型 不同格式的变量 包括带有各自
  • Hibernate 和 JPA 错误:依赖 Maven 项目上的重复导入

    我有两个 Maven 项目 一个名为项目数据另一个打电话项目休息这依赖于项目数据项目 Maven 构建成功项目数据项目但失败了项目休息项目 但以下情况除外 Caused by org hibernate DuplicateMappingEx
  • 最小化 SQLite 库大小

    我认为这对于 sqlite3 dll 或 sqlite3 lib 是相同的 但如果不是 我对 sqlite3 o mingw32 感兴趣 如何最小化库的大小 使用 O3 因为速度是我最关心的问题 所以不同的编译器优化不是一个选项 如果我知道
  • 从解析查询块返回 UIImage 数组

    我无法从此函数获得 UIImage 返回 这getDataInBackgroundWithBlock不允许我设置除Void in 然而 该块确实增加了iconArray当它迭代时 但是一旦超出该块 数组又会变空 您将在下面的代码中看到数组正
  • Firebase 动态链接在 iOS 上不起作用

    我正在制作一些应用程序并使用 firebase 动态链接 当我在我的 Android 手机上测试动态链接时 效果很好 在我的iOS中 它也可以工作 但是页面没有改变并且任何参数都没有传递 当我在 safari 上输入如下图所示的深度链接时
  • 如何使用谷歌地图V2通过触摸来在地图片段上绘制形状

    大家好 我正在使用 Google 地图 V2 我必须通过触摸在地图片段上绘制一个形状 也就是说 如果我在地图上旋转手指 就会生成一个形状 我遇到问题 因为当我们触摸时 Google mapV2 不提供纬度和经度 地图 我不需要单击 MapV
  • 限制mongodb集合中的文档数量

    我有一个用作缓存的集合 如何将这个集合中的文档数量限制为 5M 注意 可以更新的缓存项将存在于缓存中 我尝试使用 capped 但保存在 capped 集合中的项目无法修改 有没有办法做到这一点 我想避免删除该项目然后插入更新项目 不幸的是
  • “调试器无法继续运行该进程。”

    我一直在搞乱 VS 2010 调试设置 试图进入 NET Framework 工作 好吧 我无法让它工作 我还尝试过 Reflector VS 插件 并且一度可以正常工作 然后我随机开始收到此错误 This only当我在调用的行上有断点时
  • PHP 在 fclose 后无法取消链接文件

    我的脚本完成后 我可以删除该文件 但在它运行时我无法触及它 即使在fclose 这是我尝试使用的代码 Files glob SERVER DOCUMENT ROOT files csv File fopen Files 0 r while
  • 获取变量“@xml_files”不会在...行保持共享

    我有以下 Perl 代码 sub merge xml foreach my repository repo1 repo2 my xml files sub match xml my filename File Find dir if fil
  • jQuery,悬停时图像变化[重复]

    这个问题在这里已经有答案了 好的 我已经通过 PHP 动态生成了图像 因此结果不一定相同 在过去的四个小时里 我浏览了互联网并使用 jQuery 和 或 CSS 尝试了无数的事情 并且我想出了以下可行的方法 a href build php
  • 如何使用 Ninject 注入一些通用的 asp.net http 处理程序?

    我是 Ninject 的新手 我不知道如何注入我的通用 http 处理程序 我有一个 MVC3 项目 我将我的服务注入到控制器中 没有任何问题 这是我在 Ninject App start 类中用于注册服务的内容 private stati