Внедрение свойства в мой пользовательский атрибут? - PullRequest
0 голосов
/ 20 марта 2012

Мы используем StructureMap в качестве контейнера в моем текущем проекте, и все работало хорошо, пока нам не пришлось внедрить зависимости в используемый нами настраиваемый атрибут.

Во-первых, код для регистрации содержимого в контейнере будет выглядеть следующим образом ...

Container = new Container();
Registry = new Registry();
ServiceLocator = new StructureMapServiceLocator(Container);

Registry.For<IServiceLocator>().Use(ServiceLocator);
Registry.For<IHitCounter>().Add<HitCounter>();
Registry.For<IHitCountAttribute>().Use<HitCountAttribute>();

Registry.SetAllProperties(policy => policy.OfType<IHitCounter>());  

Container.Configure(config => config.AddRegistry(Registry));

Вид вышеописанной регистрации работает для нормального класса с внедрением сеттера (и инжектором конструктора), но, очевидно, не для класса атрибута.

Класс атрибута может выглядеть следующим образом ...

public class HitCountAttribute : ActionFilterAttribute, IHitCountAttribute
{
    public IHitCounter HitCounter { get; set; }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        HitCounter.Count(HttpContext.Current.Request.Url.ToString());

        base.OnResultExecuted(filterContext);
    }
}

Интерфейс выглядит следующим образом ...

public interface IHitCountAttribute
{
    IHitCounter HitCounter { get; set; }
    void OnResultExecuted(ResultExecutedContext filterContext);
}

Можно ли даже ввести зависимости в атрибут? Как это создается во время выполнения ...

Есть ли другой способ решить проблему с зависимостями?

...