Не удается получить RazorView из контейнера Windsor с использованием бета-версии MVC 3 - PullRequest
2 голосов
/ 11 октября 2010

Вот так выглядит мой Application_Start:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    _container.Register(Component.For<IWindsorContainer>()
        .Instance(_container),
        Component.For<IView, IViewPageActivator>()
            .ImplementedBy<RazorView>(),
        Component.For<IFilterProvider>()
            .ImplementedBy<WindsorFilterAttributeFilterProvider>(),
        Component.For<IControllerFactory>()
            .ImplementedBy<WindsorControllerFactory>(),
        Component.For<ControllerContext>()
            .ImplementedBy<ControllerContext>()
    );


    _container.Register(
        AllTypes.Of<IController>()
            .FromAssembly(Assembly.GetExecutingAssembly())
            .Configure(c => c.LifeStyle.Transient)
    );

И все же при попытке запустить решение я получаю следующую ошибку:

Can't create component 'System.Web.Mvc.RazorView' as it has dependencies to be
satisfied. 
System.Web.Mvc.RazorView is waiting for the following dependencies: 

Keys (components with specific keys)
- viewPath which was not registered. 
- layoutPath which was not registered. 
- runViewStartPages which was not registered. 
- viewStartFileExtensions which was not registered. 

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

1 Ответ

3 голосов
/ 13 октября 2010

Я все еще играю с MVC, но думаю, что могу указать вам правильное направление.

Когда вы зарегистрировали компонент для RazorView, вы хотите использовать метод DynamicParamters - например:

Component.For<IView>().ImplementedBy<RazorView>()
    .DynamicParameters((kernel, dict) => {
        dict["viewPath"] = "~";
        dict["layoutPath"] = "~";
        dict["runViewStartPages"] = true;
        dict["viewStartFileExtensions"] = new List<string>() { "cshtml"};
    })

У меня также не было приведенного к Windsor RazorView в качестве IViewPageActivator, поскольку он не реализует этот интерфейс.Если вы читаете Пост от Брэда Уилсона , ваша реализация IDependencyResolver должна вернуть null для IViewPageActivator, если у вас его нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...