使用 Ninject 将存储库注入自定义会员资格提供程序

2024-03-01

我正在尝试使用 MVC 3 中的 ninject 将存储库注入到自定义成员资格提供程序中。

在 MembershipProvider 中我尝试了以下操作:

[Inject]
public ICustomerRepository _customerRepository{ get; set; }

And

[Inject]
public TUMembershipProvider(ICustomerRepository customerRepository)
{
    _customerRepository = customerRepository;
}

在我的 ninject 模块中,我尝试了以下操作:

Bind<MembershipProvider>().ToConstant(Membership.Provider);

以上都不起作用。

当我使用(在 global.asa 中)

kernel.Inject(Membership.Provider);

和...一起

[Inject]
public ICustomerRepository _customerRepository{ get; set; }

它可以工作,但我没有生命周期管理,这将导致 NHibernate 出现“ISession is open”错误,因为 ISession 是 InRequestScope 而存储库不是。


你可以使用该方法@Remo Gloor 在他的博客文章中概述了提供者注入 http://www.planetgeek.ch/2012/02/08/asp-net-provider-injection-with-ninject-3-0-0/。它涉及 3 个步骤:

  1. Add [Inject]s 到您需要注入的提供程序上的任何属性(尽管他展示的模式 - 创建一个非常简单的类,其唯一功能是接受属性注入并将任何请求转发到使用构造函数注入实现的真实类 - 很好值得关注)

    public class MyMembershipProvider : SqlMembershipProvider
    {
        [Inject]
        public SpecialUserProvider SpecialUserProvider { get;set;}
        ...
    
  2. 创建一个初始化器包装器来实现IHttpModule这会拉动提供者,触发其创建:-

    public class ProviderInitializationHttpModule : IHttpModule
    {
        public ProviderInitializationHttpModule(MembershipProvider membershipProvider)
        {
        }
    ...
    
  3. 注册IHttpModule在你的RegisterServices :-

    kernel.Bind<IHttpModule>().To<ProviderInitializationHttpModule>();
    
  4. 没有4; Ninject 完成剩下的工作 - 引导所有已注册的内容IHttpModules包括您在启动序列期间添加的那个)。

(不要忘记阅读关于生命周期等博客文章的评论。)


最后,如果你正在寻找一些完全脑死亡的东西来巧妙地解决它,请尝试这个@Remo Gloor 的答案 https://stackoverflow.com/a/9314754/11635


PS,关于整个混乱的一篇很棒的文章是提供者不是@Mark Seemann 的模式 http://blog.ploeh.dk/2011/04/27/ProviderIsNotAPattern.aspx。 (以及他的优秀著作的必备插件:-.NET 中的依赖注入 http://manning.com/seemann这会让你从第一原理中轻松地弄清楚这些东西)

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

使用 Ninject 将存储库注入自定义会员资格提供程序 的相关文章

随机推荐

  • ClojureScript clojure.set?

    如何在 ClojureScript 中使用 clojure set 我总是收到错误 def middle land set for x water hor y vec clojure set difference set range 0 b
  • 带有片段的空白活动不在 Android Studio 中

    您好 我的问题是 当我想在 Android studio 中创建一个新项目并且我想选择带有片段的空白活动时 不是将活动添加到移动窗口 有什么解决方案可以帮助我修复它吗 进入下一页后即可找到它 只需选中 使用片段 框 然后单击 完成
  • Bootstrap Affix 更改列表项宽度

    我正在使用 Twitter Bootstrap 的后缀来附加当前包含导航列表的左栏 div class row div class span3 ul class nav nav list li class nav header Naviga
  • 专门为代表 Now 的 DateTime 制作一个包装器是个好主意吗?

    我最近注意到 为了模拟和测试目的 使用代表 现在 的 DateTime 作为方法的输入参数确实很好 而不是每个方法都调用DateTime UtcNow他们自己 我在上面的方法中执行一次 然后将其转发到下面的方法中 所以很多需要 现在 的方法
  • 我通过 Axios 来自 API 并使用 Vue 显示的数据未显示

    我刚刚开始学习 Vue Js 我试图从 API 中获取一些信息并将其显示在表格中 我真的看不出问题出在哪里 我彻底浏览了代码 但无法弄清楚问题出在哪里 下面是我写的代码 我很漂亮 这是一件小事 或者在当前版本的 Vue 中是否有新的方法来做
  • 在Qt中,QEvent意味着失去窗口焦点,重新获得窗口焦点? (设置透明度)

    当我的应用程序失去焦点时 我需要设置透明度 我还需要在重新获得焦点时重置透明度 通过鼠标单击或 alt tab 或其他方式 我知道如何设置透明度 所以这不是问题 设置窗口不透明度 0 75 问题是何时 我同意 K vin Renella 的
  • 从 SecureRandom 获取确定性值?

    出于基准测试的目的 我希望 SecureRandom 产生确定性的输出 这是否可以通过使用种子 或者算法的规范 来实现 import java security SecureRandom class TestSecureRandom pub
  • 在 Vite 中禁用预加载

    我正在将一个使用 Vue 2 和 Webpack 的大项目迁移到 Vue 3 和 Vite 到目前为止 一切看起来都很棒 但是当我们第一次尝试发布到生产环境时 我们注意到注入了许多模块预加载标签 并且其中的许多文件可能永远不会被使用 问题是
  • python lxml 与 py2exe

    我已经用 dom 生成了一个 XML 我想使用 lxml 来漂亮地打印 xml 这是我用于漂亮打印 xml 的代码 def prettify xml xml str import lxml etree as etree root etree
  • 使用 data.table 将 R 中的许多列乘以特定的其他列?

    我在 R 中有一个很大的 data table 其中有几个带有美元值的列 在另一列中 我有一个通货膨胀调整数字 我试图弄清楚如何用它乘以通货膨胀调整栏来更新我的每个货币栏 假设我有数据 DT lt data table id 1 1000
  • Playframework 2.1 找不到 javax.persistence 和 play.db

    我在使用 Play 框架 版本 2 1 创建实体的 Scala 教程中遇到问题 我正在尝试做 import java util import javax persistence import play db jpa 但是当我编译时 它告诉我
  • 更改 moreNavigationController 图标的颜色

    我已经成功地使用更改了导航栏色调 背景颜色和标签颜色this https stackoverflow com questions 438381 customizing the more menu on a tab bar 但是可以改变图标的
  • 检测 UITableView 部分标题何时捕捉到屏幕顶部

    我想检测何时UITableView节标题捕捉到屏幕顶部 然后修改标题的高度 但我不知道该怎么做 有人可以帮忙吗 我能够通过使用来完成检测哪个标题粘在表视图的顶部didEndDisplayingHeaderView and willDispl
  • 在jHtmlArea中添加表格

    有人知道使 jHtmlArea 支持表格内容并允许用户将表格 单元格 行添加到编辑器框的方法吗 它似乎不是该插件的标准功能 我希望我的用户能够在所见即所得编辑器中创建表 试试这个代码 只需将 editor 更改为您为文本区域设置的 id 即
  • 根据 OnKeyUp 中的文本框过滤列表框项目?

    我有一个包含大量项目的列表框 这些项目都是帐号 因此很难搜索 当用户在文本框中键入内容时 是否可以对项目进行 过滤 以便仅显示与迄今为止输入的内容相匹配的项目 e g List Box 2342 3434 2332 3224 然后用户在文本
  • R - ggplot2 直方图的阴影部分

    所以我有这个数据 dataset rbinom 1000 16 0 5 mean mean dataset sd sd dataset data subset subset dataset dataset gt mean 2 sd data
  • 错误:环境中未设置 XDG_RUNTIME_DIR。 Gtk-警告 **:无法打开显示:

    我曾经用 sublime 打开文本文件 对于只读文件 我曾经这样做 sudo sublime 但现在突然间sudo sublime命令给出以下错误 sublime 3931 Gtk WARNING cannot open display w
  • 无法调用类型缺少调用签名的表达式

    我有苹果和梨 两者都有isDecayed属性 interface Apple color string isDecayed boolean interface Pear weight number isDecayed boolean 这两种
  • 如何在闪亮的仪表板侧边栏中的 menuSubItem 下包含输入小部件?

    如何在闪亮应用程序的侧边栏中的 menuSubItem 下包含一个控件小部件 这是我的试验 library shiny library shinyWidgets library shinydashboard ui lt dashboardP
  • 使用 Ninject 将存储库注入自定义会员资格提供程序

    我正在尝试使用 MVC 3 中的 ninject 将存储库注入到自定义成员资格提供程序中 在 MembershipProvider 中我尝试了以下操作 Inject public ICustomerRepository customerRe