Пытался искать, но без конкретных ответов (я очень новичок в этом) ...
С 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 ActionFilters
Spring.Net и инъекция атрибутов
Так каков правильный способ сделать это? Я думал, что это уже покрыто spring.net, но похоже, что это не так.
Я ссылался на Spring.Web.Mvc3 v4.0.30319 и работаю на ASP.NET MVC 3.
EDIT:
Я пробовал это:
SpringMvcDependencyResolver dr =
new SpringMvcDependencyResolver(ContextRegistry.GetContext());
и затем получение сервиса через dr.GetService<ITestService>();
Это, кажется, заставляет его работать несколько, но вместо получения правильной фактической реализации сервиса (в моем Filters.xml я записал свойство ref в TestService
), он возвращает Заглушка версия сервиса. Я сделал это неправильно? Или я должен просеять и выбрать правильный или что-то через GetServices()
?
EDIT2:
@ Андреас: Извините за поздний ответ. Но у моего 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;
Так что чисто для этого тестового проекта в Фильтр должно быть вставлено сообщение. Но результат не такой, как ожидалось.