Ninject:每个被拦截的类实例有一个拦截器实例?

2024-04-02

我目前遇到一个问题,尝试为每个被拦截的类实例连接一个拦截器实例。

我正在 InterceptorRegistrationStrategy 中创建 Advice 并设置回调以解析来自内核的拦截器(它有一个注入构造函数)。请注意,我只能在回调中实例化拦截器,因为 InterceptorRegistrationStrategy 没有引用 Kernel 本身。

            IAdvice advice = this.AdviceFactory.Create(methodInfo);
            advice.Callback = ((context) => context.Kernel.Get<MyInterceptor>());
            this.AdviceRegistry.Register(advice);

我得到每个方法的拦截器实例。

有没有办法为每个被拦截的类型实例创建一个拦截器实例?

我正在考虑命名范围,但拦截类型和拦截器不互相引用。


这是不可能的,因为为绑定的所有实例的每个方法创建一个拦截器。

但是您可以做的不是直接在拦截器中执行拦截代码,而是获取将处理拦截的类的实例。

public class LazyCountInterceptor : SimpleInterceptor
{
    private readonly IKernel kernel;

    public LazyCountInterceptor(IKernel kernel)
    {
        this.kernel = kernel;
    }

    protected override void BeforeInvoke(IInvocation invocation)
    {
        this.GetIntercpetor(invocation).BeforeInvoke(invocation);
    }

    protected override void AfterInvoke(IInvocation invocation)
    {
        this.GetIntercpetor(invocation).AfterInvoke(invocation);
    }

    private CountInterceptorImplementation GetIntercpetor(IInvocation invocation)
    {
        return this.kernel.Get<CountInterceptorImplementation>(
            new Parameter("interceptionTarget", new WeakReference(invocation.Request.Target), true));                
    }
}

public class CountInterceptorImplementation
{
    public void BeforeInvoke(IInvocation invocation)
    {
    }

    public void AfterInvoke(IInvocation invocation)
    {
    }
}

kernel.Bind<CountInterceptorImplementation>().ToSelf()
      .InScope(ctx => ((WeakReference)ctx.Parameters.Single(p => p.Name == "interceptionTarget").GetValue(ctx, null)).Target);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ninject:每个被拦截的类实例有一个拦截器实例? 的相关文章

  • 温莎城堡中的多个装饰器模式

    我们正在重新设计一些遗留软件以使其更具可测试性 并决定使用依赖注入和 Castle Windsor 来帮助我们 首先 我们的目标 许多装饰器都在数据流上工作 装饰器的多种组合是可能的 并且每种情况下的根节点可能需要从不同的地方获取数据 从技
  • 如何重置IOC容器中的所有实例

    我使用以下命令创建了一个 C WPF 应用程序MVVM轻框架 http www galasoft ch mvvm 我的应用程序使用ViewModelLocator类在运行时定位视图模型 这ViewModelLocator利用SimpleIo
  • 如何使用 MOQ 对象测试 Ninject ConstructorArguments?

    我最近一直在做我的第一个测试驱动开发项目 并一直在学习 Ninject 和 MOQ 这是我第一次尝试这一切 我发现 TDD 方法发人深省 Ninject 和 MOQ 也很棒 我正在从事的项目并不是特别适合 Ninject 因为它是一个高度可
  • 如何编写库而不强迫用户使用库的 IOC 容器

    简短的问题是 给定一个图书馆warrants当应用程序使用该库时 在给定应用程序的情况下 将特定的 IOC 容器用于其内部warrants使用 IOC 容器来连接其依赖项 如果两个容器不同 它们如何才能很好地协同工作 场景是 应用程序定义了
  • Angular 4.3 HttpClient:拦截响应

    在有关新的文档中HttpClientModuleAngular 4 3的新版本中 拦截请求的机制解释得非常好 还提到了响应拦截器机制 但我找不到任何相关内容 有谁知道如何拦截响应以便在将正文消息发送到服务之前修改正文消息 Thanks 我最
  • 在 ASP.NET MVC 的 Windsor 配置中,控制器的生活方式是否应该始终是瞬态的?

    我遇到了一个问题 我认为 Html DropDownList 会在我第一次提交表单时回发所选值 但每个后续回发只会发布初始回发中的数据 因此 我将生活方式 瞬态 添加到为温莎城堡配置控制器的组件元素中 这解决了问题 但当然使回发需要更长的时
  • Ninject 当 T 型祖先时绑定

    我有一个大致如下所示的依赖链 public class CarSalesBatchJob public CarSalesBatchJob IFileProvider fileProvider public class MotorcycleS
  • 为什么每次都需要调用BuildServiceProvider来获取依赖呢?

    在我的上注册实例后IServiceCollection 我需要注册一个IAutomapperProvider这取决于IAssemblyProvider在此方法调用之前已注册 public static IServiceCollection
  • IoC 容器本身的单元测试

    我认为以前没有人问过这个问题 尽管搜索这样的术语确实很困难单元测试ioc容器并且没有找到有关如何实现 IoC 以便执行单元测试的问题 我想对 IoC 容器本身进行单元测试 基本上是因为有时我会遇到容器问题 就像应用程序的任何其他部分一样 并
  • 如何使用 Ninject InRequestScope 处理异步调用?

    我们正在使用Ninject in an ASP NET Web API应用程序 然后我们绑定我们的DbContext with InRequestScope 这对于我们的大多数请求都很有效 因为它们同步完成所有工作 因此可以在请求完成后安全
  • 如何使用 Ninject 设置可选方法拦截?

    假设我有一个类 我有时想 但现在总是 拦截一些 但不是全部 方法 据我了解 这可以通过以下方式完成 InterceptAround 在我的 Ninject 模块中 在更高级别的代码中 或者在这些方法上使用 InterceptAttribut
  • 如何使用 Groovy 拦截 Java 应用程序中所有方法的执行?

    是否可以拦截应用程序中调用的所有方法 我想和他们一起做一些事情 然后让他们执行 我试图覆盖这种行为Object metaClass invokeMethod 但似乎不起作用 这可行吗 你看过吗Groovy AOP http github c
  • 如何在 ASP.NET MVC Web 应用程序中使用 Ninject?

    我创建了一个新的 MVC Web 应用程序 并且引用了 Ninject dll Ninject Web Common dll 和 Ninject Web MVC dll Global asax cs public class MvcAppl
  • Akka 通过可堆叠行为拦截接收

    Akka 和 Scala 新手 请根据需要随意编辑问题 以便清楚地表达我在 Scala 和 Akka 领域的意图 在展示代码片段之前 这是我想要解决的问题 我本质上想开发一个通用模块 供我的团队在使用 Akka Actor 开发应用程序时使
  • MVC 中带有 Ninject 的适当存储库生命周期范围

    在 MVC 3 应用程序中将 Entity Framework 4 与 Ninject 结合使用时 存储库和 EF 上下文的适当生命周期范围是什么 我一直在使用默认的 InTransientScope 但质疑是否应该使用 InRequest
  • 将 mvc-mini-profiler 与 EF 4.0 和 Ninject 结合使用

    我正在尝试将新的 mvc mini profiler 与基于 EF4 的应用程序一起使用 但我不知道如何正确连接到目标数据源 据我所知 Func
  • ASP.NET MVC 5 中的 Actionfilter 注入

    我有一个简单的过滤器 public class IsAdmin ActionFilterAttribute IAuthenticationFilter private string roleName IBusinessIdentity id
  • 在 ASP.NET MVC5 中使用 Ninject 注入实体框架 DbContext

    我刚刚进入依赖注入世界 我有以下自定义 DbContext public partial class SkyTrackerContext DbContext public SkyTrackerContext base Database Se
  • 在Application_Start中访问ninject内核

    我正在使用 Ninject 和随 nuget 安装的 MVC3 扩展 我的内核设置代码位于 App Start NinjectMVC3 cs 文件中 控制器中的一切都运行良好 但我无法弄清楚如何 正确 绑定 Global asax cs M
  • NamedScopes Ninject 绑定和异步(线程)

    我的项目由服务和存储库构成 所有存储库共享数据库上下文 在我的一个服务层中 我有一个使用存储库写入数据库的异步方法 Web 请求将完成并处理上下文 然后此方法才能使用它 我试着去理解命名范围 http www planetgeek ch 2

随机推荐

  • 为什么我无法将工作簿定义为对象?

    为什么我不能用这两种方式定义工作簿 我在那里有范围位只是为了快速测试 我该如何修复它 这会产生一个 Compile Error Type Mismatch Sub Setwbk Dim wbk As Workbook Set wbk F Q
  • 将查询数据保存为 csv 文件

    我有一个应用程序 可以打开 csv 文件并将所有内容显示到格式化的 datagridview 中 从那里我有一个按钮可以打开另一个包含一系列复选框的表单 复选框具有我们之前打开的csv文件的所有属性 用户应该能够根据他们想要的属性查询文件
  • 卸载 Visual Studio 2013 update 1 rc

    害怕听起来像个菜鸟 我在卸载 Visual Studio 2013 update 1 时遇到问题 我怎么做 转到 控制面板 gt 程序 gt 程序和功能 gt 左侧栏上的 查看已安装的更新 然后向下滚动到 Microsoft Visual
  • 某些表的动态数据库备份

    我只需要备份主数据库中的一些表 其他表是参考表并且是静态的 因此不需要备份 我在 SD 卡上创建了一个新的空白数据库 我可以直接访问SD卡上的数据库还是需要在备份完成后复制它 真正的问题是我是否可以循环遍历每个记录中的字段或其他内容 这样我
  • 如何使用boost多精度生成正态随机数?

    我正在尝试使用 boost 的多精度从正态分布生成随机数 我可以从均匀分布生成随机数 但是当我尝试从标准正态分布生成随机数时 它报告错误 这是代码 以下来自来自 boost 的示例 http www boost org doc libs 1
  • Django 使用整数字段作为外键字段

    为了支持旧的 遗留 数据库 我们必须创建一个使用的表整数字段 as a 外键 to User表 这就是我们的模型的样子 class UserHistory user id models IntegerField null True blan
  • FusedLocationProviderClient requestLocationUpdates 不会触发上述 API 23 的 LocationCallBack

    我已经用尽了所有可能的方法来解决这个问题 在对我的应用程序进行调整之前 从技术上讲 我使用的是在 API 23 及更高版本中运行的相同代码 回调 在请求位置更新中 不在手机中触发 棉花糖及以上 但它在模拟器中运行良好 使用 Pixel 2
  • 有按钮栏的视图吗? (描述视图的图像链接)

    我正在寻找有关 Android 默认应用程序中底部栏的视图或某种信息 例如电子邮件或解锁图案 如下图所示 我在 Android 网站或 Google 搜索中找不到任何有关此内容的信息 Image http img11 imageshack
  • 使用Python编写Parquet文件的方法?

    我无法找到允许使用 Python 编写 Parquet 文件的库 如果我可以结合使用 Snappy 或类似的压缩机制 那就加分了 到目前为止 我发现的唯一方法是将 Spark 与pyspark sql DataFrame镶木地板支持 我有一
  • MVC 操作被调用两次

    我有一个MVC Action Method如果请求需要时间才能完成 则会被点击两次 在检查 chrome 控制台网络日志和 fiddler 时 该请求仅从 JS 发送一次 在下图中 我面临这个问题Approach 1 但是 如果我这样做的话
  • Django“DecimalFields 必须定义“decimal_places”属性。”

    我的模型字段之一如下 aaf 1kg all models DecimalField blank True null True 当我正常使用我的模型时 一切都很好 当我在一个ready hook https docs djangoproje
  • java中的虚方法调用是什么?

    我在一些计算机科学测试中看到了下一段 我希望我能在这里得到它的含义的一个很好的解释 因为我用谷歌搜索了一个小时 但找不到任何东西 当我们说 Java 语言有虚方法调用我们的意思是 在java应用程序中 执行的方法是由运行时的对象类型决定的
  • 获取console.log()显示自定义对象描述

    我有一个自定义的 JS 对象来表示网格 对于这个例子来说 它看起来像这样 function Grid c r var layout var contentPointer 0 this getCell function c r Return
  • 在 TVML 应用程序中更改 XMLHttpRequest 的用户代理

    我正在使用 TVMLKit 开发 Apple TV 应用程序 我的应用程序的 JavaScript 代码尝试使用以下命令向服务器发送 HTTP 请求XMLHttpRequest 服务器需要特定的用户代理 所以我尝试了以下方法 var req
  • Android 视频视图中缓冲区达到 20% 后如何开始(播放)视频

    我有一个视频视图 可以使用来自服务器的 url 来播放视频 我希望在缓冲达到 20 时播放视频 所以我已经将 setOnBufferingUpdateListener 的侦听器添加到媒体播放器中 如下所示 Uri video Uri par
  • 如何为 php 安装 hiphop?

    大多数开发人员都了解 Facebook 的 Hiphop for php 我想在我的脚本中使用它 但不知道从哪里开始 我应该与我的服务器提供商联系吗 或者我需要在脚本中添加一些代码吗 HipHop 很难安装 但幸运的是我刚刚经历过它 您需要
  • 相当于 Python 中 Julia 中的“with”?

    Julia 有与 Python 相当的东西吗 with 也许作为一个宏 这非常有用 例如 自动关闭打开的文件 Use a do堵塞 关于 do 块的文档是here https en wikibooks org wiki Introducin
  • 使用 VSTO 将数据加载到 Microsoft Project 时如何提高性能

    背景 我们有一个现有的应用程序 可以将数据加载到 Microsoft Project 中 以便可以由 MS Project 进行操作 原始应用程序是由 VB6 编写的旧式 COM 项目加载项 针对 MS Project 2003 2007
  • 启用 SSL 刷新 URL 时出现 React-router 问题

    目前 我在使用 React router 的 BrowserHistory 和 nginx 代理转发请求时遇到问题 我读过以下答案 React router url 在刷新或手动写入时不起作用 https stackoverflow com
  • Ninject:每个被拦截的类实例有一个拦截器实例?

    我目前遇到一个问题 尝试为每个被拦截的类实例连接一个拦截器实例 我正在 InterceptorRegistrationStrategy 中创建 Advice 并设置回调以解析来自内核的拦截器 它有一个注入构造函数 请注意 我只能在回调中实例