问题标签 [unity-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.
unity-container - 使用接口拦截器按约定进行 Unity 注册导致“[type] 不可拦截”异常
WithMappings.FromMatchingInterface
我想使用约定将所有实现特定接口的类注册到 Unity 中。此外,我希望使用接口拦截行为来拦截所有已注册的对象。问题是 Unity 还注册了具体类之间的映射,当这些类被解析时,会抛出异常并显示以下消息:
“[type] 不可拦截”
我意识到使用具体类类型解析对象不是最佳实践,但我想知道为什么 Unity 在按约定注册时会自动为接口 -> 具体类以及具体类 -> 具体类添加映射?这意味着如果您添加接口拦截器并使用具体类型进行解析,它将永远无法工作。
我想要的结果是 Unity 在按照约定注册并给它一个接口拦截器时没有添加具体类型 -> 具体类型映射,这样我们可以使用它的具体类型解析类,如果我们愿意,我们只需不被拦截。
我不想使用 ,VirtualMethodInterceptor
因为我不想对类进行更改以使拦截起作用,这包括继承自MarshalByRef
. 我还想避免单独注册所有对象。
因此,我的问题是,按惯例注册时如何仅注册接口映射?
更新:单独注册类会产生同样的问题,因此假设一旦一个对象注册了一个接口拦截器,那么它就不能通过使用具体类型来解决。
新注册码:
更新 2为所有接口添加默认拦截器似乎可行,尽管此解决方案相当 hacky。此解决方案需要在按约定进行标准注册之前的一些代码,并InterfaceInterceptor
在基于约定的注册中删除。
预注册码
一些解释困境的代码:
c# - IMethodInvocation 中的参数和输入之间的区别
Arguments
集合和界面Inputs
中的集合有什么区别?IMethodInvocation
两者都是IParameterCollection
.
asp.net-identity - ASP.NET Identity 2 - 注入 ISecureDataFormat<>
我在这里描述了同样的问题,没有答案,只是使用 Unity。
我正在尝试注册ISecureDataFormat<>
最新的 VS2013(更新 2)SPA/Web Api 模板。
我试过了
它“有效”但不是真的,因为它抱怨该树中的下一个依赖关系,IDataSerializer ......然后是下一个 IDataProtector,我没有找到它的实现。
c# - 接口的自动生成实现(没有类的代理)
我想要实现的是:
没有实现的地方IFooFactory
- 因为它是由FactoryInterceptionBehavior
.
但是,当我尝试解决此问题IFooFactory
时,我收到一条ResolutionFailedException
消息:
InvalidOperationException - 当前类型 IFooFactory 是一个接口,无法构造。您是否缺少类型映射?
我还考虑过自己创建代理(使用Intercept.ThroughProxy<>
或城堡动态代理...),但我仍然需要对容器进行类型注册。我不知道如何委托/覆盖这种类型的实例化(如 Ninject 的Bind<IFoo>().ToMethod(() => return new Foo())
)。
c# - unity interception from config without using container
Hi I am trying to use unity interception (I don't want to use unity container). I am able to configure run time but don't know how to configure it from config.
my code:
Behavior:
And this is how I am calling it
This is working. I need to configure this from config file. Please help
c# - 基于属性的属性拦截。如何?
我有一个实体的抽象类,负责为每个实体实例生成和返回唯一键。密钥生成有点昂贵,并且基于具体实体的属性值。我已经标记了参与密钥生成的属性,KeyMemberAttribute
所以我需要做的就是在EntityBase.Key
每次装饰有KeyMemberAttribute
更改的属性时使 = null 。
所以,我得到了这样的基类:
然后我得到了如下实现的具体实体
每次属性值更改时,我都需要将其KeyMemberAttribute
设置为EntityBase.Key
。null
c# - 在 Unity 中注册拦截实例
对于我的单元测试,我目前正在使用 Moq 模拟我的拦截器和拦截的类,然后在 Unity 中注册拦截的实例并为接口设置默认拦截器。然后我解析实例并调用拦截的方法,并验证正在调用拦截方法。
这很好用,但是我宁愿在注册期间设置拦截,就像我在注册服务/单例时一样,以保持一切一致。
我看不到任何使用该方法配置拦截的IUnityContainer.RegisterInstance()
方法,因为它不需要任何InjectionMembers
. 如果我UnityContainer.Configure<Interception>().SetDefaultInterceptorFor<T>()
在解析之前调用,我实际上可以对实例使用拦截。
是否有更好/更简单的方法来注册或模拟拦截器?
vb.net - 延迟(延迟创建)或抑制 Unity 调用处理程序属性的创建,直到实际调用装饰方法
我正在尝试在我的接口(或实现)上使用拦截调用处理程序和处理程序属性。假设我的接口有两个方法 DoSomething() 和 DoSomethingElse(),而我只有 DoSomethingElse() 的拦截器;当我解析我的主界面时,调用处理程序的构造函数会被调用,即使我从未调用 DoSomethingElse()。
我通过解析到 Lazy(of IMainInterface) 来尝试这个,但是当我调用函数 DoSomething() 时,调用处理程序仍然是不必要的。有没有办法通过代码或配置来防止这种情况发生。这是我的示例实现
处理程序属性和调用处理程序
接口和实现
注册和执行方法的主模块
它产生以下输出:
在惰性解决
之前 在进行惰性函数调用
主类之前 - 构造
函数 普通样本属性的构造函数
创建处理
程序 样本调用处理程序
主类的构造函数 做一些事情......
尽管 DoSomethingElse() 从未被调用,但处理程序创建的成本被添加到所有流中。有没有办法避免这种情况?任何帮助表示赞赏。
提前致谢!SV
reflection - 如何使用 Log4Net 进行拦截(MS Unity)
我正在尝试将 Log4Net 与 Unity 和拦截一起使用......看起来一切都应该工作,但没有......我有两个问题......我认为有一个解决方案。当我登录文件时,我还应该记录我正在记录的方法。事实上,我有这样的配置:
在我拥有的模式中%M
,这应该是我正在调用的方法......但我正在使用 Unity 拦截,因此,记录的方法名称是 INVOKE:
正是这种方法通过反射调用了我的真实方法。那么如何使用PatternLayout
log4Net 解决这个问题呢?可能吗?我的第二个问题,我应该有两个不同的附加程序......我会创建一个名为MyNamespace.[MyClass].[MyMethod]
但这行不通,因为对于 log4net,我正在记录另一种方法,也就是说invoke
,而不是我的真实方法。我希望一切都清楚。
任何人都可以帮助我吗?
谢谢
unity-container - Unity InterceptionBehavior 与 InjectionConstructor
是否可以使用 InjectionConstructor 配置自定义拦截行为?换句话说,你如何告诉 Unity 在你的 InterceptionBehavior 上使用哪个构造函数。
为了在我们的应用程序中跟踪方法流,我目前有四个处理跟踪的 InterceptionBehavior 类。它们之间的唯一区别是它们用于配置跟踪的 TraceSwitch,因此我们可以在不同的层中打开/关闭跟踪。我只想有一个自定义 TraceInterceptionBehavior,我可以使用 ConstructorInjection 来设置 TraceSwitches。
像这样的东西(仅示例,无法编译)。这就是我将业务服务注册到容器中的地方。其他层(例如控制器和存储库等)也会有类似的注册。
我试图调用的自定义 TraceInterceptionBehavior 的构造函数:
据我了解,如果使用旧 Unity 中的 PolicyInjection 和 CallHandler 是可能的,例如以下示例,但我不知道如何使用新版本的 Unity。
更新
正如下面@DanielJ.G 所指出的,拦截行为类可以像任何其他类一样注册到容器中。对于我希望使用不同的跟踪开关进行跟踪拦截的每一层,我只需为拦截行为设置一个命名注册。下面的代码将用于服务层。使用不同名称和 traceswitch 配置的控制器和存储库也有类似的注册。