Я пытаюсь заставить Property 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, не прибегая к вышеизложенному? :)