温莎城堡的多接口注入

2023-11-24

当容器中有多个实现时,如何让温莎城堡在运行时选择正确的接口植入。

例如,假设我有一个名为 IExamCalc 的简单界面,它可以通过计算来了解某人在该考试中的表现。

不,我们有几种实现方式,如下所示,

public interface IExamCalc
{
    int CalculateMark(ExamAnswers examAnswers)
}

public class WritenExam : IExamCalc
{
    public int CalculateMark(ExamAnswers examAnswers)
    {
         return 4;
    }
}

public class OralExam : IExamCalc
{
    public int CalculateMark(ExamAnswers examAnswers)
    {
         return 8;
    }
}

public class ExamMarkService
{
    private IExamCalc _examCalc;
    public ExamMarkService(IExamCalc examCalc)
    {
        _examCalc = examCalc;
    }

    public int[] CalculateExamMarks(ExamAnswers[] examAnswers)
    {
        IList<int> marks = new List<int>;
        foreach(ExamAnswers examanswer in examaAnswers)
        {
            marks.Add(_examCalc.CalculateMark);
        }
    }
}

假设 ExamMarkService 正在通过 Window 进行解析,我如何确保在构造函数中注入正确的实现,这是多租户问题的示例吗?

希望一切都有意义

Colin G


正如 David 所说,你不能,但 IHandlerSelector 会让你掌控。查看测试以了解如何使用它们:https://svn.castleproject.org/svn/castle/trunk/InversionOfControl/Castle.Windsor.Tests/HandlerSelectorsTestCase.cs

基本上,你会做类似的事情:

public class WritenExamHandler : IHandlerSelector
    {
        public bool HasOpinionAbout(string key, Type service)
        {
            // Decision logic here
            return somethingThatWouldBeTrueToSelectWritenExam && service == typeof(IExamCalc);
        }

        public IHandler SelectHandler(string key, Type service, IHandler[] handlers)
        {
            return handlers.Where(handler => handler.ComponentModel.Implementation == typeof (WritenExam)).First();
        }
    }

然后你注册它:

container.Kernel.AddHandlerSelector(new WritenExamHandler());

这将使您能够轻松处理多租户问题:)

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

温莎城堡的多接口注入 的相关文章

随机推荐

  • 将php对象存储在html表单元素上并通过GET方法传递php对象?

    我可能听起来有点奇怪 但是有办法吗 例如 我有一个 PHP 对象 foo 有没有办法通过某些对象加密函数以 HTML 表单 隐藏输入 存储该对象 然后使用解密函数检索该对象 同样 我可以通过 GET 方法传递这些对象吗 就像其他地方已经指出
  • React useEffect 导致:无法对未安装的组件执行 React 状态更新

    获取数据时 我得到 无法在未安装的组件上执行 React 状态更新 该应用程序仍然有效 但反应表明我可能会导致内存泄漏 这是一个空操作 但它表明应用程序中存在内存泄漏 要修复此问题 请取消 useEffect 清理函数中的所有订阅和异步任务
  • C# 读取注册表:ProductID 在 x86 目标应用程序中返回 null。 “任何CPU”都可以正常工作

    我最近搬到了一台装有 VS 2010 的 W7 64 位机器 我的项目设置为运行Any CPU 当我将其更改为目标时x86我注意到我的一些注册表调用不再起作用 我正在尝试阅读ProductID像这样的字段 RegistryKey windo
  • Bootstrap carousel:如何同时滑动两个carousel滑块?

    我在单个页面上有三个轮播滑块 我希望它们同时移动其中两个 即两者应该同时更改滑块图像 两者都有相同数量的图像 幻灯片 这是我正在使用的代码 jQuery carousel example generic1 carousel example
  • Interface Builder 中的颜色错误

    问题 我在 Interface Builder 中设置了颜色 设置了 RGB 通道 然后对工作窗口进行了屏幕截图 在 Photoshop 中打开它 并通过颜色选择器 我在 Interface Builder 中设置 检查颜色 结果 RGB值
  • 在 64 位 Windows 7 上使用 32 位版本的 ODBC?

    我在使用 ODBC 和使用 Visual Basic 6 因此它是 32 位 编写的应用程序时遇到问题 看来VB6的ODBC库与Windows 7的64位ODBC不兼容 返回的错误码是 2147220992并且它在谈论不兼容的架构 我可以安
  • QMake CONFIG() 函数和“主动配置”

    在阅读 Qt 5 1 的文档 特别是 qmake 的文档时 我对 qmake CONFIG 函数文档中给出的解释感到困惑 我完全理解该函数的单参数版本 但双参数版本对我来说完全没有意义 我认为我的困惑来自于缺乏 活动配置 的定义 因为 Qt
  • Puppeteer 登录 page.evaluate 内

    我如何console log page evaluate中的某些内容 将其传递给节点并使用它during页面的评价 我实际上想将 page evaluate 的进度记录到控制台并向用户显示一些结果 puppeteer 12 的更新 改编自当
  • 画布被 CORS 数据和 S3 污染

    我的应用程序正在显示存储在AWS S3 出于安全原因 位于私人存储桶中 为了允许用户从浏览器中查看我生成的图像签名 URL like https s3 eu central 1 amazonaws com my bucket stuff i
  • Quartz 调度程序与设置 cron

    计划从设置 cron 作业转向 Quartz 调度程序 使用 Quartz 而不是设置 cron 的优点 缺点是什么 收到时间触发作业 Cron 还是 Quartz 关联 还有其他指点吗 我用过并且喜欢石英 以下是石英的一些优点 如果您使用
  • HTTP cookie 端口特定吗?

    我在一台机器上运行两个 HTTP 服务 我只是想知道他们是否共享 cookie 或者浏览器是否区分两个服务器套接字 当前的 cookie 规范是RFC 6265 它取代了RFC 2109 and RFC 2965 两个 RFC 现在都标记为
  • cygpath 无法将 Windows 路径转换为 ​​Linux 路径

    我正在尝试在 Windows 计算机上将文件路径转换为 Linux 和 Windows 之间的文件路径 windows 的 unix 路径工作正常 cygpath w cygdrive c CYGWIN CYGBuild build mak
  • Android - Google 云端硬盘 HTTP 请求

    我正在尝试编写一个可以将文件上传到 Google Drive 的应用程序 我选择通过原始 http 请求与此服务交互 因为我在 Android 上没有找到任何有用的 API 示例 而且它看起来比提供的库更轻量级 我用过https devel
  • 如何从 Eclipse 运行 Javah

    所以我试图在 Eclipse 中编译的 class 文件上运行 javah 工具 但我不知道该怎么做 我发现的例子只是说了一些类似 在你的类上运行 javah 的内容 但我真的不知道在 Eclipse 中哪里可以找到这样的命令行 如果有人能
  • 从句子生成 N 元语法

    如何生成字符串的 n 元语法 例如 String Input This is my car 我想用这个输入生成 n gram Input Ngram size 3 输出应该是 This is my car This is is my my
  • android 动态设置listview高度

    i have ExpandableListview inside ScrollView我知道这不好 但我也有 显示整个列表的唯一解决方案是使用代码设置其高度layoutParams relativeLayout LayoutParams 参
  • Angular Material mat-table 定义组件中可重用的列

    有人知道是否可以创建一个与 mat table 一起使用的 列 组件 我尝试为常用的列定义创建一个组件 但是在添加到表时出现错误 无法找到列选择器 我的列定义如下 Component selector iam select column t
  • 在 python 3.5 中模拟异步调用

    如何使用以下命令模拟从一个本机协程到另一个协程的异步调用unittest mock patch 我目前有一个相当尴尬的解决方案 class CoroutineMock MagicMock def await self args kwargs
  • 制作适合打印的 ASP.NET 页面的最佳方法?

    我只是好奇大多数人如何使他们的 ASP NET 页面适合打印 您是否使用 CSS 或其他内容创建单独的适合打印的 ASPX 页面版本 您如何处理分页符和宽表等情况 是否有一种适用于大多数情况的优雅解决方案 您基本上可以创建另一个 CSS 文
  • 温莎城堡的多接口注入

    当容器中有多个实现时 如何让温莎城堡在运行时选择正确的接口植入 例如 假设我有一个名为 IExamCalc 的简单界面 它可以通过计算来了解某人在该考试中的表现 不 我们有几种实现方式 如下所示 public interface IExam