2009-12-02 2 views
2

Я использую MvcContrib для выполнения моей инъекции зависимостей контроллера Spring.Net ASP.Net MVC. Мои зависимости не вставляются в мой фильтр действий CustomAttribute. Как я могу получить в нем свои зависимости?Использование Spring.Net для встраивания зависимостей в ASP.NET MVC ActionFilters

Скажем у вас есть ActionFilter, что выглядит так:

public class CustomAttribute : ActionFilterAttribute, ICustomAttribute 
{ 
    private IAwesomeService awesomeService; 

    public CustomAttribute(){} 

    public CustomAttribute(IAwesomeService awesomeService) 
    { 
      this.awesomeService= awesomeService; 
    } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     //Do some work 
    } 
} 

с разделом конфигурации Spring.NET, который выглядит так:

<object id="CustomAttribute " type="Assembly.CustomAttribute , Assembly" singleton="false"> 
    <constructor-arg ref="AwesomeService"/> 
</object> 

И вы используете атрибут как так:

[Custom] 
public FooController : Controller 
{ 
    //Do some work 
} 

ответ

1

Жесткая часть здесь заключается в том, что ActionFilters, похоже, получают новые экземпляры с каждым запросом t и в контексте, который находится вне того места, где Spring знает. Я обрабатывал те же ситуации, используя класс Spring «ContextRegistry» в моем конструкторе ActionFilter. К сожалению, это вводит использование специфического API Spring в ваш код, что является хорошей практикой, чтобы избежать, если это возможно.

Вот что мой конструктор выглядит следующим образом:

public MyAttribute() 
{ 
    CustomHelper = ContextRegistry.GetContext().GetObject("CustomHelper") as IConfigHelper; 
} 

Имейте в виду, что если вы загружаете несколько контекстов Spring, вам нужно будет указать, какой контекст вы хотите в GetContext (...) метод.

+0

Это единственный способ, которым я смог это сделать, поскольку большинство сценариев инъекций начинаются с контроллера. Вы можете установить DependencyResolver по умолчанию в MVC для использования Spring на основе того, что вам нужно реализовать .... это сохранит специальный код Spring вне ваших атрибутов. – Pharcyde

 Смежные вопросы

  • Нет связанных вопросов^_^