我有一个控制器
[MyAttribute]
public class MyController: Controller
{
public MyController(InterfaceA a, InterfaceB b)
{
}
}
如果请求来自具有MyAttribute的控制器,我希望InterfaceA始终绑定到ClassA。所以我打了电话。
Bind<InterfaceA>.To<ClassA>().WhenClassHas<MyAttribute>();
InterfaceB的一个实例化,ClassB,有一个像这样的构造函数。
public ClassB(InterfaceC c)
当被调用的控制器具有MyAttribute时,我希望InterfaceC绑定到C类。但是,我以前的绑定不起作用,因为父类是中间类,而不是控制器本身。反正有没有写绑定所以如果调用控制器具有属性?
它将在任何地方工作编辑:我的解决方案使用Remo的建议
public static IBindingInNamedWithOrOnSyntax<TBinding> WhenControllerHasAttribute<TBinding>(this IBindingWhenSyntax<TBinding> instance, Type type)
{
Func<IRequest, bool> hasAttribute = (request) =>
{
while (request.ParentRequest.Target != null)
{
request = request.ParentRequest;
}
return request.Target.Member.ReflectedType.IsDefined(type, false);
};
return instance.When(hasAttribute);
}
答案 0 :(得分:5)
是的,您必须使用When(Func<IRequest, bool> condition)
代替并编写一些自定义代码。
WhenClassHas使用以下Func:
request => request.Target.Member.ReflectedType.HasAttribute(attributeType)
您必须使用request.ParentRequest