В настоящее время я использую Interceptors, используя Castle DynamicProxy. Я требую, чтобы перехватчик взял некоторые пользовательские атрибуты в моем методе уровня обслуживания, но invocation.Method.GetCustomAttributes ничего не возвращает. Что-нибудь, что я мог сделать неправильно?
Перехваченный метод:
[Transaction()]
[SecurityRole(AuthenticationRequired = false, Role = SystemRole.Unauthorised)]
public virtual void LoginUser(out SystemUser userToLogin, string username)
{
...
}
Перехватчик:
// Checks that a security attribute has been defined
foreach (SecurityRoleAttribute role in invocation.Method.GetCustomAttributes(typeof(SecurityRoleAttribute), true))
{
if (!securityAttributeDefined)
securityAttributeDefined = true;
}
Я также пробовал:
Attribute.GetCustomAttribute(invocation.Method, typeof(SecurityRoleAttribute), true);
Обновление:
Может быть проблема с конфигурацией. Код конфигурации выглядит следующим образом:
InterceptorsInstaller:
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Component.For<LoggingInterceptor>()
.Named("LoggingInterceptor"));
container.Register(
Component.For<SecurityInterceptor>()
.Named("SecurityInterceptor"));
container.Register(
Component.For<ValidationInterceptor>()
.Named("ValidationInterceptor"));
}
ServiceInstaller:
public void Install(IWindsorContainer container, IConfigurationStore store)
{
string[] interceptors = {"LoggingInterceptor", "SecurityInterceptor"};
container.Register(AllTypes.FromAssemblyContaining<BaseService>().Pick()
.If(Component.IsInSameNamespaceAs<LoginService>())
.Configure(c => c
.LifeStyle.Transient
.Interceptors(interceptors))
.WithService.DefaultInterface());
}
Я использую Castle 2.5.2 / .Net 3.5.
Спасибо
Пол