1

Я думаю, что мой вопрос длинный.Скажите C# использовать замок для создания объектов

Допустим, у меня есть атрибут:

public sealed class MyCustomAttribute: ActionFilterAttribute 

Используется на метод класса

[MyCustomAttribute] 
    public virtual ActionResult Options(FormCollection collection) 

Теперь мне нужно добавить параметр а застройщик в

public MyCustomAttribute(IMyDependentObject dependentObject) 
    {   
       (...) 
    } 

(Вы Propably заметить что это какой-то код Asp.NET MCV)

Я хотел бы использовать DI для создания этого атрибута. Asp.NET MVC-код автоматически создает его, и я не знаю, как/где я мог бы писать код для использования Castle istead.

Любые идеи?

+0

Я не понимаю ваш вопрос. Что значит «ASP.NET MVC-код автоматически создает его»? Он не создает его - * вы * создаете его, добавляя атрибут выше метода «Параметры». Что вы пытаетесь достичь? Можете ли вы быть более конкретным с вашим примером? –

+0

Релевантный вопрос: http://stackoverflow.com/questions/986019/database-injection-into-a-validation-attribute-with-asp-mvc-and-castle-windsor – Ryan

ответ

2

До сих пор замок I konw не поддерживает инъекцию существующих объектов, что делает невозможным внедрение атрибутов, поскольку их конструкция не находится под вашим контролем. Другие контейнеры IoC, такие как Ninject поддерживают инъекцию существующих объектов. Они вводят свойства вашего атрибутного фильтра. См. http://github.com/ninject/ninject.web.mvc для расширения, которое точно делает то, что вам нужно.


Что вы можете сделать, если вы хотите, чтобы остаться на замке, чтобы придать свой собственный ControllerActionInvoker, полученный из ControllerActionInvoker (AsyncControllerActionInvoker в случае контроллера асинхронного) во все контроллеры. В вашем собственном вызове вы переопределяете GetFilters. Дополнительно к фильтрам, возвращаемым базой, вы добавляете FilterInfos, которые создаются замком.

Решение, которое фильтрует информация о создании и добавил может быть достигнуто с различными стратегиями т.д .:

  • Добавить собственный атрибут, который содержит информацию, например, имя связывания
  • конфигурационный файл/базы данных

вы можете считать переход на MVC3 это делает все немного проще. Как вы можете зарегистрировать свой собственный фильтр FilterProvider, который делает все намного проще. В этом FilterProvider вы должны решить, какую информацию о фильтрах вы хотите добавить. См. Снова две стратегии выше. См. http://bradwilson.typepad.com/blog/2010/07/service-location-pt4-filters.html для получения информации о MVC3 и фильтрах.

+0

Спасибо за подсказку MVC3. Я посмотрю на это и попробую – vIceBerg

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