gpt4 book ai didi

c# - 在接口(interface)上拦截

转载 作者:行者123 更新时间:2023-11-30 12:39:26 24 4
gpt4 key购买 nike

我正在尝试制作类似 IAuditable 的东西接口(interface),作为 Ninject 拦截调用的标记。

假设我有以下内容:

public interface IAuditable
{

}

public interface IProcessor
{
void Process(object o);
}

public class Processor : IProcessor, IAuditable
{
public void Process(object o)
{
Console.WriteLine("Processor called with argument " + o.ToString());
}
}

使用此设置:

NinjectSettings settings = new NinjectSettings() { LoadExtensions = true };
IKernel kernel = new StandardKernel(settings);
kernel.Bind<IAuditAggregator>().To<AuditAggregator>().InThreadScope();
kernel.Bind<IAuditInterceptor>().To<AuditInterceptor>();

kernel.Bind(x =>
x.FromThisAssembly()
.SelectAllClasses()
.InheritedFrom<IAuditable>()
.BindToDefaultInterfaces() //I suspect I need something else here
.Configure(c => c.Intercept().With<IAuditInterceptor>()));
kernel.Bind<IProcessor>().To<Processor>();

每当我尝试 kernel.Get<IProcessor>();我收到一个异常,告诉我有多个绑定(bind)可用。

如果我删除 kernel.Bind<IProcessor>().To<Processor>()然后它按预期工作,但您可能有一个 IProcessor没有实现 IAuditable .

我走在正确的轨道上吗?

编辑:按照建议,我尝试改用属性:

public class AuditableAttribute : Attribute
{

}
[Auditable]
public class Processor : IProcessor
{

public void Process(object o)
{
Console.WriteLine("Processor called with argument " + o.ToString());
}
}
//in setup:
kernel.Bind(x =>
x.FromThisAssembly()
.SelectAllClasses()
.WithAttribute<AuditableAttribute>()
.BindDefaultInterface()
.Configure(c => c.Intercept().With<IAuditInterceptor>()));

这会导致与使用接口(interface)相同的重复绑定(bind)问题。

最佳答案

您应该能够为实现 IAuditable 的类型编写一个约定绑定(bind),为未实现的类型编写一个约定绑定(bind)。

        kernel.Bind(x =>
x.FromThisAssembly()
.SelectAllClasses()
.InheritedFrom<IAuditable>()
.BindDefaultInterfaces()
.Configure(c => c.Intercept().With<IAuditInterceptor>()));

kernel.Bind(x =>
x.FromThisAssembly()
.SelectAllClasses()
.InheritedFrom<IProcessor>()
.Where(t => !typeof(IAuditable).IsAssignableFrom(t))
.BindDefaultInterfaces());

关于c# - 在接口(interface)上拦截,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45508338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com