Я пытаюсь заставить свойство Injection работать над атрибутом фильтра настраиваемых действий. Он работает так, как и должно быть, однако я бы хотел использовать DI для самого свойства. Мой фильтр выглядит так
[AttributeUsage(AttributeTargets.Class)]
public sealed class HeaderFilterAttribute : ActionFilterAttribute
{
public IMarketService MarketService
{ get; set; }
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var view = (ViewResultBase)filterContext.Result;
if (view != null)
{
BaseViewModel viewModel = view.ViewData.Model as BaseViewModel;
if (viewModel != null)
viewModel.Header = GetHeaderScript();
}
base.OnActionExecuted(filterContext);
}
private string GetHeaderScript()
{
//Use MarketService here and return header script
return "script";
}
}
Вот так я настраиваю свойство, используя StructureMap внутри моего класса BootStrapper.
//HeaderFilterAttribute
IMarketRepository marketRepository = new SqlMarketRepository();
IMarketService marketService = new MarketService(marketRepository);
ObjectFactory.Container.Configure(r => r.ForConcreteType<HeaderFilterAttribute>().
Configure.WithProperty("MarketService").
EqualTo(marketService));
Моя проблема в том, что у меня нет доступа к SqlMarketRepository, поскольку все мои конкретные типы вводятся через DI, и я действительно не хочу использовать конкретные типы в моем загрузчике. Итак, главный вопрос сейчас заключается в том, как мне добавить MarketService в атрибут Filter, не прибегая к описанному выше? :)