Tôi đang cố gắng để có được Thuộc tính bộ lọc hoạt động trên Thuộc tính bộ lọc hành động tùy chỉnh. Nó đang làm việc như nó được cho là, tuy nhiên, tôi muốn sử dụng DI trên bản thân tài sản. Bộ lọc của tôi trông giống như thế nàyTiêm thuộc tính vào Bộ lọc hành động
[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";
}
}
Đây là cách tôi định cấu hình thuộc tính bằng StructureMap bên trong lớp BootStrapper của tôi.
//HeaderFilterAttribute
IMarketRepository marketRepository = new SqlMarketRepository();
IMarketService marketService = new MarketService(marketRepository);
ObjectFactory.Container.Configure(r => r.ForConcreteType<HeaderFilterAttribute>().
Configure.WithProperty("MarketService").
EqualTo(marketService));
Vấn đề của tôi là tôi không có quyền truy cập vào SqlMarketRepository từ tất cả các loại bê tông của tôi được tiêm qua DI và tôi thực sự không muốn sử dụng các loại bê tông trong bootstrapper của tôi. Vì vậy, câu hỏi cuối cùng hiện nay là, làm thế nào để tôi đưa MarketService vào thuộc tính Filter mà không cần phải sử dụng ở trên? :)
Có phải tùy chọn MVC 3 không? Điều này được xây dựng trong. –
Tôi cần phải đưa ra quyết định trong vòng một tháng Craig và tôi không thực sự chắc chắn nhóm sẽ phê duyệt đi với một phiên bản xem trước để sử dụng sản xuất: ( – Praveen