Внедрение сеттера с Unity для ActionFilter

Привет, я использую MS Unity Container с моим приложением MVC 3.

Я хочу использовать инъекцию сеттера, чтобы внедрить зависимость для фильтра действий. У меня есть фильтр действий, который я регистрирую в global.asax, и этот фильтр действий вызывает класс репозитория для загрузки некоторых данных. Я хочу ввести конкретный класс, используя DI. Это может быть очень легко достигнуто с помощью Карта структуры. Но почему-то я не могу заставить его работать с Unity. Я перепробовал все решения по этой ссылке.

Вот мой код:

MyActionFilter.cs

public class GlobalViewBagActionFilter : ActionFilterAttribute
{
    public IUserRepo UserRepo { get; set; }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var testVal = UserRepo.LoadData();
    }
}

Регистрация фильтра действий в Global.asax.cs

private static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new GlobalViewBagActionFilter());
    }

вызов вышеуказанного метода в Appliation_Start для регистрации

RegisterGlobalFilters(GlobalFilters.Filters);

Я пробовал много возможных блоков кода для регистрации класса, но ничего не получалось. Либо я получу исключение, либо в фильтре действий свойство UserRepo будет нулевым.

Любые указатели на то, как мне заставить его работать?


person Amit    schedule 17.08.2012    source источник


Ответы (1)


Вам нужно настроить контейнер:

private static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    var container = new UnityContainer()
       .RegisterType<IUserRepo, UserRepoImpl>()

       .RegisterType<GlobalViewBagActionFilter>(
           new InjectionProperty("UserRepo", new ResolvedParameter<IUserRepo>()) 
       );


    filters.Add(container.Resolve<GlobalViewBagActionFilter>());
}
person onof    schedule 21.08.2012