То, что я пытаюсь сделать, больше похоже на Interceptors в NHibernate. У меня просто проблемы с пониманием того, как они работают.

аюсь создать систему, которая позволяет пользователям выполнять определенные действия, но их учетная запись должна иметь определенный «билет» каждый раз, когда они это делают. Например, предположим, что они хотят создатьProductим понадобитсяCreateProductTicket.

Конечно, я мог бы просто сделать это с помощью некоторых «если», но я хочу попробовать более надежное решение. Моя структура выглядит примерно так ...

interface ITicket<T> where T : ITicketable
{
}

Моя основная цель - создать Атрибут, возможно, так:

public class TicketRequiredAttribute : Attribute
{
 public TicketRequiredAttribute(ITicket<T> ticket)
 {
  if(ticket == null) 
    return;
  }
}

И чтобы можно было украсить контроллерили же Действия хранилища с этим. Так как ...

ProductsControlller
[TicketRequired(CreateProductTicket)]
public ActionResult CreateProduct(Product product)
{
 // ... **I am unsure how to tell if TicketRequired was true or not**
}
Проблема 1

Я недостаточно знаком с атрибутами, чтобы знать, как определить, был ли TicketRequired «встречен» или нет. Может ли кто-нибудь просветить меня об этом?

Проблема 2

Проблема, с которой я сталкиваюсь, связана с запросами к базе данных. Я хочу, чтобы иметь возможность проверить пользователя (IMembershipRepository имеетGetUser метод), но я не совсем уверен, как это сделать с помощью атрибута.

С помощьюCastle.Windsor, У меня настроен Dependency Injection для внедрения репозиториев в контроллеры. Я полагаю, я мог бы передатьIMembershipRepository сквозьTicketRequired конструктор, но у меня есть ощущение, что станет очень грязно - и крайне нестабильно. Есть ли более логичный способ подойти к этому?

Ответы на вопрос(1)

Ваш ответ на вопрос