J'essaie de faire fonctionner l'injection de propriété sur un attribut de filtre d'action personnalisé. Il fonctionne comme il est censé, cependant, je voudrais utiliser DI sur la propriété elle-même. Mon filtre ressemble à ceciInjection de propriété dans un filtre d'action
[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";
}
}
Voici comment je configure la propriété en utilisant StructureMap dans ma classe BootStrapper.
//HeaderFilterAttribute
IMarketRepository marketRepository = new SqlMarketRepository();
IMarketService marketService = new MarketService(marketRepository);
ObjectFactory.Container.Configure(r => r.ForConcreteType<HeaderFilterAttribute>().
Configure.WithProperty("MarketService").
EqualTo(marketService));
Mon problème est que je n'ai pas accès à SqlMarketRepository puisque tous mes types de béton sont injectés via DI et je ne veux vraiment pas utiliser des types concrets dans mon programme d'amorçage. Donc, la question ultime est maintenant, comment puis-je injecter MarketService dans l'attribut Filtre sans recourir à ce qui précède? :)
Le MVC 3 est-il une option? Ceci est intégré. –
Je dois prendre une décision dans un mois Craig et je ne suis pas vraiment sûr que l'équipe approuvera aller avec une édition Preview pour l'utilisation de production :( – Praveen