Ошибка «Нет параметров без конструкторов». Создание экземпляра контроллера, зарегистрированного в Windsor Container - PullRequest
0 голосов
/ 19 сентября 2010

Используя MVC и пытаясь использовать внедрение зависимостей для контроллеров, но когда я пытаюсь вызвать метод на контроллере, который получает зависимость, я получаю ошибку «конструктор без параметров». Вот мои настройки:

ProductRepository : IProductRepository


ProductService : IProductService {
     public ProductService(IProductRepository repository) {} }

ProductController {
     public ProductController(IProductService service) {} }

В Global.asax:

protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        InitializeServiceLocator();
        RegisterRoutes(RouteTable.Routes);
    }


    protected virtual void InitializeServiceLocator()
    {
        IWindsorContainer container = new WindsorContainer();
        ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(container));

        container.RegisterControllers(typeof(HomeController).Assembly);
        ComponentRegistrar.AddComponentsTo(container);
        foreach (var handler in container.Kernel.GetAssignableHandlers(typeof(object)))
        {
            System.Diagnostics.Debug.WriteLine(String.Format("{0} {1}",
               handler.ComponentModel.Service,
               handler.ComponentModel.Implementation));
        }

        ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(container));
    }

ComponentRegistrar:

public static void AddComponentsTo(IWindsorContainer container)
{
    AddCustomRepositoriesTo(container);
    AddApplicationServicesTo(container);
}

Когда InitializeServiceLocator завершает работу, я вижу, что все контроллеры, службы и репозитории зарегистрированы.

Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 19 сентября 2010

Я все еще хотел бы знать проблему, но я обошел ее, создав свой собственный WindsorControllerFactory для этого поста (с модификацией, чтобы избежать любого действия web.config): http://mvcsharp.wordpress.com/2010/01/09/setting-up-ioc-in-asp-net-mvc-using-castle-windsor/

WindsorControllerFactory в предыдущем коде был MvcContrib.Castle.WindsorControllerFactory. Кто-нибудь успешно использует версию MvcContrib?

Спасибо.

...