如何在 Ninject 中使用 Provider

2024-01-04

我有以下代码

public class Something {
    [Inject]
    public Configuration config {get;set;} //singleton
    [Inject]
    public Provider<WindowHandler> windowsProvider { get; set; } //NOT singleton

    public void Search(string text) {
        WindowHandler handler = windowsProvider.Create(xxxxxx);
        //use the new handler that was created
    }
}

但看起来 Provider 在我放置 xxxxxx 的地方采用了 IContext。不应该使用我从内核引导并创建 Something.cs 时的 IContext 吗? Provider 上的无参数 Create 方法在哪里??? (我来自 Guice land 的观点,它的编码方式与上面类似)。

所以问题是我该如何正确地做到这一点?

谢谢, 院长


您似乎正在尝试在代码中使用提供程序作为工厂。

Ninject 术语中的提供者是一个工厂,提供给 Ninject 来创建专门创建的对象。因此,它获得解析上下文,该上下文可用于创建不同的实例,具体取决于实例注入的位置。

public class FooProvider : Provider<IFoo>
{
    public override IFoo CreateInstance(IContext ctx)
    {
        // add here your special IFoo creation code
        return new Foo();
    }
}

kernel.Bind<IFoo>().ToProvider<FooProvider>();

您想要的是编码器中的一个工厂,它创建一个实例WindowHandler。因此创建一个接口来创建实例,如下所示:

public interface IWindowHandlerFactory
{
    WindowHandler Create();
}

Bind<IWindowHandlerFactory>().ToFactory();

或者你可以注射Func<WindowHandler>无需添加配置。但这在我看来意义不大。

注意:所有这些都需要 Nuget 提供的 Ninject.Extensions.Factory 作为预发行版 3.0.0-rc2。

也可以看看:http://www.planetgeek.ch/2011/12/31/ninject-extensions-factory-introduction/ http://www.planetgeek.ch/2011/12/31/ninject-extensions-factory-introduction/

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

如何在 Ninject 中使用 Provider 的相关文章

随机推荐

  • 如何判断B类是否是A类的子类?

    看来如果你为 Mac OS 开发 NSObject有isSubclassOfClass方法 但是当我检查同一个类的 iOS 类引用时 它没有该方法 并且 Xcode 抱怨该方法 我目前的解决方案是放置一个方法 void iAmClassB在
  • DataView RowFilter 中的撇号

    我有一个 DataView 我试图根据动态字符串进行过滤 dv RowFilter ContentTitle titleFilter 在某些情况下 titleFilter包含撇号 它会关闭过滤器查询并导致错误 有什么办法可以摆脱这个角色吗
  • 对微服务的 XA 支持

    Scenario 我有多个符合 XA 的数据库 前端有不同的微服务 这些微服务对它们执行 CRUD 操作 我需要在这些微服务之间执行两阶段提交 这意味着我有一个正在运行的服务器 它对这些微服务进行 API 调用以进行一些更新 并且这些更新应
  • 如何停止 Microsoft 认知 TTS 音频播放?

    我正在使用 Microsoft 认知服务语音 SDK 的 JavaScript 版本https github com Azure Samples cognitive services speech sdk https github com
  • PyQt 对齐复选框并将其放在每一行中

    我正在尝试做this http falsinsoft blogspot ro 2013 11 qtablewidget center checkbox inside cell html与复选框 遗憾的是 它是为 C 编写的 并且对 Pyth
  • 为什么我收到未读块数据 - 非法状态异常?

    我只有以下内容 JavaPairRDD
  • java单例模式,所有变量都应该是类变量吗?

    如果一个类实现了单例模式 是否应该将所有变量声明为静态 有什么理由不应该将它们声明为静态吗 这有什么不同吗 不 单例模式只是意味着单个实例是唯一的实例 它并不意味着 使所有内容都可以静态访问 单例模式为您提供 单实例 的所有好处 而不牺牲测
  • 使用 new 创建时命名 ValueTuple 属性

    我知道当我隐式创建元组时可以命名参数 例如 var me age 21 favoriteFood Custard 显式创建元组时是否可以命名参数 IE var me new ValueTuple
  • ruby 中的块作用域

    我的理解是 ruby 块具有块作用域 并且在块内创建的所有变量将仅存在于该块内 案例示例 food toast cheese wine food each food puts food capitalize puts food Output
  • Woocommerce 按属性搜索

    我在默认的 woocommerce 搜索系统中遇到了一个小问题 我需要开设一家基于 WooCommerce 的书店 所有这些书籍都包含独特的属性 例如标识号和 ODN 或 IBN 现在我需要一个搜索栏 如果我在搜索栏中输入任何独特的属性 例
  • 什么控制 git checkout 反馈?

    有时一个git checkout命令给出进度反馈 git checkout develop Checking out files 100 10779 10779 done Switched to branch develop 有时它不会 下
  • Python中获取总物理内存

    如何以与分布无关的方式获取 Python 中的总物理内存 我不需要已用内存 只需要总物理内存 跨平台解决方案的最佳选择是使用psutil https github com giampaolo psutil包 可在PyPI https pyp
  • Helvetica 在 Windows 操作系统上呈现为 Arial

    在我的网站上 http helvetitee com http helvetitee com 我有以下字体堆栈 font family helvetica neue helvetica nimbus sans Nimbus Sans 一种网
  • 用 Coq 重写假设,保留蕴涵

    我正在做 Coq 证明 我有P gt Q作为假设 并且 P gt Q gt Q gt P 作为引理 如何将假设转化为 Q gt P 当我尝试apply它 我只是产生新的子目标 这没有帮助 换句话说 我想从以下开始 P Prop Q Prop
  • 清除 woocommerce 中的结账字段

    我正在尝试删除各个结账字段中自动加载的用户信息 但似乎找不到任何方法来访问字段值 我已经尝试了以下清除格式 删除 字段等的操作 但我找不到任何内容显示如何仅删除该值 有谁知道如何访问这个 add filter woocommerce che
  • 如何使用 ADB 生成 Android 中的捏合等多点触控事件? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想通过 ADB 命令行在 Android 中生成多点触控 捏合 的输入事件 现在我可以使用以下命令生成触摸屏滑动事件 input t
  • 每个项目类型都有单独的资源字典

    我已经在我的共享项目中创建了一个 ResourceDictionary 没有任何问题 然而 我的一些样式对于 Windows Phone 8 1 来说非常特殊 并且不会在 Windows 8 1 中使用 由于Windows Phone项目中
  • OwinContext.Request.Path 和 PathBase 是如何填充的?

    我正在根据 Katana 项目中的其他示例为 OpenID Connect 授权代码流程编写自己的 OWIN 中间件 作为此过程的一部分 我必须构造几个 URI 例如重定向 URI 和返回 URL Katana 中的其他示例通过连接当前请求
  • 通过适应度函数从群体中选择个体

    我一直在研究一种算法 我需要从大小为 k 的群体中选择 n 个个体 其中 k 比 n 大得多 所有个体都有适应度值 因此选择时应优先考虑较高的适应度值 然而 我不想简单地选择最好的n个人 最差的人也应该有机会 自然选择 因此 我决定找到人群
  • 如何在 Ninject 中使用 Provider

    我有以下代码 public class Something Inject public Configuration config get set singleton Inject public Provider