Пытался искать, но конкретных ответов нет (я в этом новичок) ...
Когда Spring.NET поддерживает ASP.NET MVC 3, как я могу выполнять внедрение зависимостей внутри фильтров действий? Изучал, но понятия не имею! : /
В документальном фильме Spring.NET, похоже, упоминается, что обо всем этом позаботились, все, что нужно сделать, это просто зарегистрировать фильтр действий в контексте Spring, а Spring позаботится обо всем необходимом процессе внедрения.
http://www.springframework.net/doc-latest/reference/html/web-mvc3.html
Однако я просто не могу заставить его работать. Изучая блоги и т. Д., Можно встретить упоминания об использовании поставщиков фильтров или непосредственном использовании ContextRegistry.GetContext (), но, похоже, это не соответствует AOP ..
Использование Spring.Net для внедрения зависимостей в ASP. Фильтры действий .NET MVC
Spring.Net и внедрение атрибутов
Итак, как правильно это сделать? Я думал, что это уже покрыто spring.net, но оказалось, что это не так.
Я сослался на Spring.Web.Mvc3 v4.0.30319, и я работаю на ASP.NET MVC 3.
РЕДАКТИРОВАТЬ:
Я пробовал это:
SpringMvcDependencyResolver dr =
new SpringMvcDependencyResolver(ContextRegistry.GetContext());
а затем получение службы через dr.GetService<ITestService>();
. Кажется, это несколько заставляет ее работать, но вместо получения правильной фактической реализации службы (в моем Filters.xml я написал свойство ref на TestService
), она возвращает заглушку версии службы. Я сделал это неправильно? Или мне нужно перебрать и выбрать правильный или что-то еще через GetServices()
?
РЕДАКТИРОВАТЬ2:
@Andreas: Извините за поздний ответ. Но у моего Global.asax
он есть.
public class MvcApplication : Spring.Web.Mvc.SpringMvcApplication
Чтобы проверить, у меня есть это в моей весенней конфигурации:
<object type="Spring.Mvc3QuickStart.Filters.TestFilter, Spring.Mvc3QuickStart" singleton="false" >
<property name="Message" value="This is the ActionFilter message" />
</object>
В моем фильтре:
public class TestFilter : ActionFilterAttribute
{
public string Message { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
filterContext.Controller.ViewBag.ActionMessage = Message;
base.OnActionExecuting(filterContext);
}
}
В моем контроллере у меня есть это:
ViewData["Message"] = Message;
Итак, чисто для этого тестового проекта в фильтр должно быть введено сообщение. Но результат не такой, как ожидалось.