Брэд Уилсон (Brad Wilson) изобилует серию статей о расположении служб, в которой описано, как создать свой собственный поставщик фильтров, который может поддерживать внедрение зависимостей: http://bradwilson.typepad.com/blog/2010/07/service-location-pt4-filters.html (прокрутите вниз до раздела «Добавление внедрения зависимостей в фильтры»).
- Скопируйте код, который он предоставляет для UnityFilterAttributeFilterProvider.cs.
UnitFilterAttributeFilterProvider.cs
using System.Collections.Generic;
using System.Web.Mvc;
using Microsoft.Practices.Unity;
public class UnityFilterAttributeFilterProvider : FilterAttributeFilterProvider {
private IUnityContainer _container;
public UnityFilterAttributeFilterProvider(IUnityContainer container) {
_container = container;
}
protected override IEnumerable<FilterAttribute> GetControllerAttributes(
ControllerContext controllerContext,
ActionDescriptor actionDescriptor) {
var attributes = base.GetControllerAttributes(controllerContext,
actionDescriptor);
foreach (var attribute in attributes) {
_container.BuildUp(attribute.GetType(), attribute);
}
return attributes;
}
protected override IEnumerable<FilterAttribute> GetActionAttributes(
ControllerContext controllerContext,
ActionDescriptor actionDescriptor) {
var attributes = base.GetActionAttributes(controllerContext,
actionDescriptor);
foreach (var attribute in attributes) {
_container.BuildUp(attribute.GetType(), attribute);
}
return attributes;
}
}
- Измените Application_Start файла global.asax.cs, чтобы сделать UnityFilterAttributeFilterProvider поставщиком фильтров для приложения MVC.
.
protected void Application_Start() {
// ...
var oldProvider = FilterProviders.Providers.Single(
f => f is FilterAttributeFilterProvider
);
FilterProviders.Providers.Remove(oldProvider);
var container = new UnityContainer();
var provider = new UnityFilterAttributeFilterProvider(container);
FilterProviders.Providers.Add(provider);
// ...
}
- Украсьте свойства, для которых вы хотите, чтобы Unity ввел значение, с помощью атрибута [Dependency]. И тогда тебе должно быть хорошо идти.