问题标签 [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.
wpf - 如何使用 Ninject 将动作注入到命令中?
实际探索命令模式并发现它非常有趣。我正在按照MVVM Architectural Pattern编写 WPF Windows 应用程序。
我从这些解释基础知识的帖子开始。
现在我能够将用户操作分解为命令,我认为这可以很好地注入我想要的命令。我注意到在第一篇引用的文章中可以在ViewModel中找到这些命令,所以我认为如果我可以在Ninject中使用它们并使用如下所示的绑定将我的命令实际注入到我的视图模型中,那就太好了:
但是,在这里放什么???预期的答案是一种方法。伟大的!我只需要一个方法放在那里。
因为第一篇文章只是简单地在 ViewModel 构造函数中初始化了它的命令,所以很容易说在命令执行调用上应该执行什么方法。
但是从CompositionRoot内部?除了通过您正在使用的任何 DI 容器将类型绑定在一起之外,这里没有放置任何其他方法的地方!
所以现在,我遇到了使用 Ninject Extensions 的拦截器模式。这看起来可以满足我的要求,如果我可以说的话,这里有点混乱。并不是说这些文章令人困惑,他们不是。我很困惑!
此外,BatteryBackupUnit 也给出了这个答案,他总是给出很好的答案。
但是现在,我不知道如何将它们粘在一起!谦虚,我迷路了。
所以这是我到目前为止的代码。
中继命令
分类管理视图模型
我想知道,使用Property Injection会更好,尽管我倾向于不使用它吗?
假设我CategoriesManagementView
调用了另一个窗口,比如说CreateCategoryView.Show()
,然后 CreateCategoryView 接管,直到用户回到管理窗口。
然后,创建命令需要调用 CreateCategoryView.Show(),这就是我在CompositionRoot中尝试过的。
组合根
也许我把事情复杂化了,这通常是当一个人感到困惑时会发生的事情。=)
我只是想知道 Ninject 拦截扩展是否可以成为这项工作的正确工具,以及如何有效地使用它?
asp.net-web-api - WebAPI中的Ninject拦截和无参数构造函数失败
我有一个 MVC4 站点,其中同时使用了 MVC 和 WebAPI。一切都很顺利,直到我尝试更改我的类以拥有一个有助于缓存数据的横切 AOP 类。我现在发现,当我调用一个没有 InterceptAttribute 的方法时,它会崩溃,因为 Ninject 没有注入参数,并且它失败了。
我的 BLL 课程如下所示:
我的 WebApi 控制器如下所示:
在我的网站中,我创建了以下 Ninject 类来解析控制器:
然后在 Global.asax 中注册这个解析器:
在我使用 Ninject.Extensions.Interception.Attributes.InterceptAttribute 添加属性缓存之前,一切都很好。
该类现在看起来像这样(请注意,我添加了一个无参数构造函数并将其中一个方法标记为虚拟,这些都是拦截工作所必需的):
现在在 WebAPI 控制器上,当我调用 GetToBars(具有拦截属性的方法)时,一切仍然正常。
但是,当我调用 GetAllBars(没有拦截属性的方法)时,我失败了,异常是 _context 为空。
任何帮助将不胜感激。
本
c# - 动态代理拦截器中的通用参数
要从内存缓存中添加和检索对象,我有一个带有以下方法的缓存实用程序类:
为了从数据访问类中删除一些噪音,我想使用Castle Dynamic Proxy,在这种特殊情况下,我会使用Ninject.Extensions.Interception。
问题是GetNativeItem<T>(string itemKey)
缓存实用程序的问题,在我的拦截器中如何从中T
检索invocation
?
NinjectWebCommon 绑定:
IMatchDataAccess 接口具有以下签名:
并且 CacheInterceptor 有这个实现:
c# - 迭代列表匿名类型
我正在使用 Ninject Interception 扩展来实现 SQLLogging。我有一个名为“param”的变量,它是一个匿名类型,正如它在 Watch 窗口中显示的那样(见下图)。当我这样做时param.ToString()
,它返回了
其中 invoation 是 Ninject.Extensions.Interception.IInvoation 接口类型。
我需要得到的是一个名字和它的项目。所以,对于这个,我想要“Countries = 36, 124, 826, 840”之类的东西。
我如何遍历列表来实现这一点?另外,请注意Countries
在这种情况下的名称直到运行时才知道。可能是这样的
或者
asp.net-mvc - Web API 有时工作有时在 Windows Azure“NetworkError”中失败:500 内部服务器错误
我们已经使用 Windows SQL Azure 数据库在 Windows azure 上部署了我们的第一个应用程序。在我的应用程序中,我们有时需要执行 Web 服务来完成实现。
我们配置了所有必需的设置和网站正常工作,但有时用户注册失败,有时没有相同的有效输入。请帮助我,我是 Windows Azure 的新手。查看错误和成功
- 错误图片链接http://tourneypick.com/Upload/2015-09-10%2017_46_06-Firebug%20-%20register%20_%20Application.png
- 下一步点击图片链接成功 http://tourneypick.com/Upload/2015_09_10_17_45_27_Firebug_register_Application.png
这可以在登台服务器上正常工作。
c# - Private variable is null with Ninject Interception after upgrading from 2.2 to 3.2
I upgraded Ninject from 2.2 to 3.2. Before, the interception worked fine, but now if I set a breakpoint I can see that the parameterless constructor is getting called after the constructor that has the parameters that Ninject is injecting. It wasn't getting hit before. The result of this is that my private variable is now null.
Here's what my code looks like:
What am I doing wrong? In my global.asax, I have this:
The InterceptorFactory looks like this:
The ExceptionInterceptor looks like this:
Thanks for your help.
c# - 如何访问拦截器上的扩展接口?
我们在NinjectModule
某个IInspection
接口中定义了一个多重绑定,如下所示:
所以拦截器代理类型将是 for IInspection
。然而,一些inspection
类型实现了一个IParseTreeInspection
接口,它扩展 IInspection
了:
这造成的问题是这段代码消耗了拦截器 - 可以理解的是,注入的代理类型似乎不知道任何关于 的内容IParseTreeInspection
,所以这个foreach
循环甚至不会迭代一次:
有什么方法可以进行多重绑定IInspection
(即构造函数注入IEnumerable<IInspection>
)并且仍然能够IParseTreeInspection
在 Ninject 注入拦截器时告诉实例?
dependency-injection - 需要架构解决方案 - Ninject Interception 仅适用于内核中的类
我正在使用 Ninject 进行 DI 的 asp.net mvc 应用程序。在这篇由两部分组成的文章之后,我一直在尝试实现 Ninject Interception 进行日志记录。http://codepyre.com/2010/03/using-ninject-extensions-interception-part-1-the-basics/。我已经尝试过方法注册和属性方法,但是这两种方法都不会让我拦截未在内核中注册的类上的方法。
问题是我的系统是一个多租户系统,我经常需要根据登录的客户端执行不同的具体操作。我使用工厂模式执行正确的功能,以便根据需要为每个客户端提供正确的类。但是,Factory 提供的类不在内核中,因此无法被拦截。
我正在寻找任何解决这个问题的方法,包括必要时进行架构返工,这样我就可以让所有东西都可以拦截。
c# - 在接口上拦截
我正在尝试制作类似于IAuditable
接口的东西,它充当 Ninject 拦截调用的标记。
假设我有以下内容:
使用此设置:
每当我尝试时,kernel.Get<IProcessor>();
我都会收到一个异常,告诉我有多个绑定可用。
如果我删除kernel.Bind<IProcessor>().To<Processor>()
,那么它会按预期工作,但您可能会拥有一个IProcessor
未实现的IAuditable
.
我在正确的轨道上吗?
编辑:正如建议的那样,我尝试使用属性:
这会导致与使用接口相同的重复绑定问题。
c# - 使用 Ninject,如何使用属性注入、Lazy<> 和拦截,而不会在 castle.core 中遇到错误?
我为使用 ASP.NET Webforms 的旧 SharePoint On-Prem 项目创建了一个简单的程序作为 PoC。在它的页面中,我必须使用属性注入,而对于其他一切,我可以使用构造函数注入。我也在使用:
- Ninject.Extensions.Factory
- Ninject.Extensions.Interception
- Ninject.Extensions.Interception.DynamicProxy
在我添加拦截器并使用 Lazy<> 处理一些循环依赖之前,一切都运行得相对较好。为了在示例中简化这一点,我将以下示例编写为控制台应用程序:
结果,我收到以下错误:
未处理的异常:System.TypeLoadException:无法从程序集“DynamicProxyGenAssembly2,Version=0.0.0.0,Culture=neutral,PublicKeyToken=a621a9e7e5c32e69”加载类型“Castle.Proxies.Func`2Proxy”,因为父类型是密封的。
如果我删除“Lazy<>”,它将重新引入循环依赖。如果我删除拦截,它不会有任何错误,但我需要拦截器。而且,我必须在页面上使用属性注入,因为页面的构造函数是由 webforms 管理的,没有像 MVC 领域那样有用的钩子。注意:由于使用的是 SharePoint 2013,因此使用了 Web 表单。
任何想法如何在不遇到上述错误的情况下同时保留拦截和 Lazy<> 声明?