【发布时间】:2015-01-14 18:10:01
【问题描述】:
我希望拦截实现特定接口或具有特定属性的实例的创建。我可以做一些与拦截扩展类似的事情,但这似乎只做方法和属性拦截。
这是我如何拦截方法和属性调用,但它不拦截构造函数调用:
_kernel.Bind<IInterceptor>().To<LogInterceptor>().InSingletonScope();
_kernel.Intercept(x =>
{
if (x.Plan.Type.GetInterface(typeof(ITriggerLoggingInterception).FullName) != null)
{
return true;
}
return false;
}).With<LogInterceptor>();
【问题讨论】:
-
我一直在寻找,但仍然找不到方法,这通常表明我正在尝试做一些我不应该做的事情。
-
拦截ctor想达到什么目的?它需要有多灵活?这些可能是替代方案:
.ToProvider<TProvider>()绑定或.OnActivation()绑定扩展。 -
我正在开发基于插件的 Caliburn Micro 应用程序。有一个 eventAggregator 组件,我想让开发人员轻松利用它。通常,为了使用这个组件,您必须注入一个 eventAggregator 并在其上调用 Subcribe(),然后实现 IHandle 接口,该接口告诉 eventAggregator 调用这些事件处理程序。为方便起见,我想拦截 post 构造函数调用,如果该类实现了 IHandle 接口,则为其调用 Subscribe()。这会很好,因为我可以看到开发人员忘记这样做并浪费时间跟踪它。
-
好的。谁/谁/何时创建绑定?我们使用了事件代理。并且向它注册发布者/订阅者是通过扩展 ninject 的
OnActivation的自定义RegisterBrokeredEvents()扩展完成的。这称为 post-ctor。
标签: c# ninject ninject-interception