我正在嘗試使屬性注入工作在自定義動作篩選器屬性上。它正在按照它應有的工作,但是,我想在屬性本身上使用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";
}
}
這就是我在我的BootStrapper類中使用StructureMap配置屬性的方法。
//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屬性中而不訴諸於上述? :)
是MVC 3的一個選項?這是內置的。 – 2010-10-06 20:49:54
我需要在一個月內作出決定Craig,我不確定團隊會批准使用預覽版進行生產使用:( – Praveen 2010-10-06 21:12:14