问题标签 [ninject-interception]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ninject - Ninject 中的无效操作异常:“加载 Ninject 组件 IAdviceRegistry 时出错”
我在 webforms 应用程序中使用 Ninject 3.2.0.0 和 Ninject.Extension.Factory 3.2.0.0。
我收到以下错误报告...
加载 Ninject 组件时出错 IAdviceRegistry 没有在内核的组件容器中注册此类组件。
建议: 1) 如果您已经为 KernelBase 创建了自定义子类,请确保您已正确实现 AddComponents() 方法。2) 确保您没有通过调用 RemoveAll() 从容器中删除组件。3) 确保您没有意外创建多个内核。
在 C:\Projects\Ninject\ninject\src\Ninject\Components\ComponentContainer.cs 中的 Ninject.Components.ComponentContainer.Get(Type 组件):c:\Projects\Ninject\ 中 Ninject.Components.ComponentContainer.GetT 的第 162 行ninject\src\Ninject\Components\ComponentContainer.cs:C:\Projects\Ninject\ninject.extensions.interception\src\Ninject 中 Ninject.Extensions.Interception.Activation.Strategies.ProxyActivationStrategy.ShouldProxy(IContext context) 的第 116 行。 Extensions.Interception\Activation\Strategies\ProxyActivationStrategy.cs:C:\Projects\Ninject\ninject.extensions.interception\src 中 Ninject.Extensions.Interception.Activation.Strategies.ProxyActivationStrategy.Deactivate(IContext context, InstanceReference reference) 的第 66 行\Ninject.Extensions.Interception\Activation\Strategies\ProxyActivationStrategy.cs:Ninject.Activation 的第 51 行。Pipeline.<>c__DisplayClass6.b__4(IActivationStrategy s) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Pipeline.cs:Ninject.Infrastructure.Language.ExtensionsForIEnumerableOfT.Map[T](IEnumerable) 中的第 72 行1 series, Action
1 个动作)在 c:\Projects\Ninject\ninject\src\Ninject\Infrastructure\Language\ExtensionsForIEnumerableOfT.cs:第 31 行 Ninject.Activation.Pipeline.Deactivate(IContext context, InstanceReference reference) in c:\Projects\Ninject\ ninject\src\Ninject\Activation\Pipeline.cs:C:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs 中 Ninject.Activation.Caching.Cache.Forget(CacheEntry entry)的第 74 行: C:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs 中 Ninject.Activation.Caching.Cache.Forget(IEnumerable`1 cacheEntries) 的第 254 行:Ninject.Activation.Caching.Cache 的第 240 行.Clear(Object scope) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs:Ninject.Activation.Caching.Cache 的第 198 行。<>c__DisplayClass3.b__1(Object o, EventArgs e ) 在 c 中:\Projects\Ninject\ninject\src\Ninject\Activation\Caching\Cache.cs: 第 94 行 Ninject.Activation.Blocks.ActivationBlock.Dispose(Boolean disposing) in c:\Projects\Ninject\ninject\src\Ninject\Activation \Blocks\ActivationBlock.cs:C:\Projects\Ninject\ninject\src\Ninject\Infrastructure\Disposal\DisposableObject.cs 中 Ninject.Infrastructure.Disposal.DisposableObject.Dispose() 的第 59 行:Brightspot.WebApi 的第 33 行。 Ioc.NinjectDependencyScope.Dispose() 在 System.Net.Http.HttpRequestMessageExtensions.DisposeRequestResources(HttpRequestMessage 请求)\Projects\Ninject\ninject\src\Ninject\Infrastructure\Disposal\DisposableObject.cs:System.Net.Http.HttpRequestMessageExtensions.DisposeRequestResources(HttpRequestMessage 请求)处 Brightspot.WebApi.Ioc.NinjectDependencyScope.Dispose() 的第 33 行\Projects\Ninject\ninject\src\Ninject\Infrastructure\Disposal\DisposableObject.cs:System.Net.Http.HttpRequestMessageExtensions.DisposeRequestResources(HttpRequestMessage 请求)上 Brightspot.WebApi.Ioc.NinjectDependencyScope.Dispose() 的第 33 行
c# - Ninject. Strange intercept to inner set-properties
Domain object:
TargetObject.cs
Configuration and test:
In the last line we have change property ChildTargetObject and it change inner property ChildTargetObjectInner. But we didnt get interception of it. Why?
If I remove the "virtual" near ChildTargetObject it will be work fine (but this workaround impossible because I use NHiber).
If I change ChildTargetObjectInner directly (ex, o.ChildTargetObjectInner = new ChildTargetObject();), I got intercept.
How can I intercept of any changes (in class and out of class)? Thank you.
c# - MethodInfo.GetMethodBody 返回 null
我有一个IInvocation
(from Ninject.Extensions.Interception
),.Request.Method
它指向我在应用程序中创建的类上的一个方法(因此,自定义,而不是核心 .NET 代码中的任何内容)。当我打电话时invocation.Request.Method.GetMethodBody()
,它回来了null
。为什么?
看起来这是一个 Castle DynamicProxy 问题:
c# - .net MVC 控制器使用 Ninject 拦截
我已经连接了 MVC 4 项目和 Ninject 3。
现在我想处理我的 MVC 控制器方法的拦截。
如果我添加这个:
它有点工作(即使我自己的方法没有被拦截,而是我得到了从 Controller 基类拦截的 BeginExecute、EndExecute 和 Dispose 方法)。但是,让我们说现在还可以。
如果我想像这样在 HomeController 上拦截特定方法:
它根本行不通。拦截永远不会被解雇。
另一方面,如果我在项目中的某个普通服务类上使用相同的方法拦截,那么它就可以工作。似乎只有 Controller 方法有被拦截的问题。
^这有效。
有谁知道我该怎么做?
PS。我将 NinjectWebCommon 与 WebActivators 一起使用:
dependency-injection - 多线程环境下的 Ninject 拦截
我正在尝试使用 Ninject.Extensions.Interception.DynamixProxy 创建一个拦截器来记录方法完成时间。
在单线程环境中,这样的工作:
然而,在多线程场景中,这将不起作用,因为 StopWatch 在调用之间共享。如何将 StopWatch 的实例从 BeforeInvoke 传递给 AfterInvoke,这样它就不会在调用之间共享?
ninject - Ninject 拦截不适用于 MVC 5
我正在尝试实现一个 InterceptAttribute,它应该拦截我添加属性的任何方法。我让它在 WebAPI 解决方案中工作,但是,我无法让它在 MVC 5 应用程序中工作。两个项目中的代码相同。以下代码是我创建的属性。
CacheInterceptor 代码如下:
最后,我将属性添加到以下方法中。
代码执行永远不会进入 InterceptCacheAttribute 类。我已将调试点放在该类和 CacheInterceptor 类中,并且永远不会命中调试点。该属性所在的方法执行得很好,但是,我希望它被拦截,而这并没有发生。我在不同的项目中有相同的代码。该项目是一个运行良好的 WebAPI 项目。这些方法被拦截,一切都按应有的方式运行。有人可以向我解释为什么我不能让它在 MVC 5 应用程序中工作吗?我将不胜感激。
回答 BatteryBackupUnit 的问题:答案是我不能。以下是我的 NinjectWebCommon.cs 类。
在 RegisterServices 方法中,应用程序中的每个程序集都被迭代,并且从 NinjectModule 继承的任何类都被加载。但是,我无法验证它是否正常工作,因为我无法调试它。我试过了,但是,课堂上的执行从未停止过。我知道该类正在被实例化并且模块正在被加载,因为我在那些正在工作的模块中有绑定,但是,我无法验证它。
c# - 查看 Ninject Activation Context 是否绑定到 Type
我正在尝试有选择地使用 Ninject 对类型进行拦截。如果一个实现实现了一个特定的接口,我想拦截它。如何检查 Ninject Activation Context 以查看其目标是否实现了接口?
- 请注意,在此示例中,我想检查 Foo,而不是 IFoo。(IFoo 在 Ninject.Activation.Binding.Service 属性中很容易找到)
c# - 在 Ninject 中拦截实例的创建
我希望拦截实现某个接口或具有某个属性的实例的创建。我可以做一些与拦截扩展类似的事情,但这似乎只做方法和属性拦截。
以下是我如何拦截方法和属性调用,但它不拦截构造函数调用:
c# - 为截获的类型添加 ViewModel 到 View 类型映射
我在 WPF 应用程序中同时使用 Caliburn Micro 和 Ninject。我Ninject.Extensions.Interception
用来拦截和记录对我的 ViewModels 的调用,但是这阻止了 Caliburn 定位 ViewModels 的视图,因为 Caliburn 正在被拦截的 viewModel(代理)具有不同的命名空间和名称。
例如,而不是得到:
它得到:
更复杂的是,ViewModel 和 View 位于不同的程序集中,因此不能假定命名空间。
由于我需要在运行时询问代理,我需要一种以编程方式而不是通过添加字符串映射来挂钩视图解析的方法。我没有看到任何方法可以做到这一点 - Calliburn Micro 可以吗?
wcf - Ninject 拦截和 WCF 扩展、拦截器生命周期管理
我在将 Ninject WCF 扩展与拦截扩展相结合的项目中遇到了问题。基本上取决于我如何设置我的配置,我会得到一些预期之外的不同对象生命周期结果。
我有一些测试代码,其中包含几个显示对象创建和处置的 Debug 语句。我在创建 IInterceptor 时看到了一些意外行为。属性拦截,只要我在绑定中正确设置生命周期,一切都会按照我期望的方式运行。但是我对绑定拦截感兴趣,例如:
我希望看到在每个 Wcf 服务调用(即虚拟的)上创建和处理 Aspect。我看到的是实际调用的第一个调用上的 dispose,然后我没有看到再次调用 create,但它调用了 MyAspect 类的原始实例。
我不知道在拦截器生命周期方面是否有最佳实践,但是我使用它的情况是应用于此程序集(多个服务)中的每个方法调用,用于许多事情,例如日志记录,一些节流等