Использование Spring.Net для внедрения зависимостей в ASP.NET MVC ActionFilters - PullRequest
2 голосов
/ 02 декабря 2009

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

Скажем, у вас есть 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 Ответ

1 голос
/ 24 декабря 2009

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

Вот как выглядит мой конструктор:

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

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

...