У меня есть контроллер
[MyAttribute]
public class MyController: Controller
{
public MyController(InterfaceA a, InterfaceB b)
{
}
}
Я хотел, чтобы InterfaceA всегда связывался с ClassA, если запрос поступает от контроллера с MyAttribute.Поэтому я сделал вызов.
Bind<InterfaceA>.To<ClassA>().WhenClassHas<MyAttribute>();
В одном из экземпляров InterfaceB, ClassB, есть такой конструктор.
public ClassB(InterfaceC c)
Я хочу, чтобы InterfaceC связывался с Class C.Контроллер имел MyAttribute.Однако мое предыдущее связывание не будет работать, потому что родительский класс является промежуточным классом, а не самим контроллером.Можно ли в любом случае написать привязку, чтобы она работала из любого места при условии, что вызывающий контроллер имел атрибут?
Редактировать: Мое решение, использующее рекомендации Ремо
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);
}