Я использую реализацию IDependencyResolver
для Виндзора с пользовательским WebViewPage
, который имеет сервис как свойство (предполагают службу ведения журнала) в рамках проекта MVC3.Кто создает _Layout.cshtml
Услуга вводится во все виды (их создание проходит через IDependencyResolver
).
Проблема в том, что в _Layout.cshtml (макет) служба остается пустой.
Итак, вопрос в том, кто создает макет, так как он не создан IDependencyResolver
(или, может быть, я просто не вижу очевидного)?
Edit:
public abstract class WebViewPage<TModel> : System.Web.Mvc.WebViewPage<TModel>
{
public ILocalizer Localizer { get; set; }
}
затем
<pages pageBaseType="[full namespace].WebViewPage">
в обоих system.web.webPages.razor и system.web секции в web.config из ~/Просмотров и, наконец, преобразователь зависимости:
public class WindsorDependencyResolver : IDependencyResolver
{
private readonly IKernel kernel;
public WindsorDependencyResolver(IKernel kernel)
{
this.kernel = kernel;
}
public object GetService(Type serviceType)
{
return kernel.HasComponent(serviceType) ? kernel.Resolve(serviceType) : RegisterAndResolve(serviceType);
}
public IEnumerable<object> GetServices(Type serviceType)
{
return kernel.HasComponent(serviceType) ? kernel.ResolveAll(serviceType).Cast<object>() : new object[] { };
}
private object RegisterAndResolve(Type serviceType)
{
if (!serviceType.IsAbstract && !serviceType.IsInterface)
{
kernel.Register(Component.For(serviceType).ImplementedBy(serviceType).LifestylePerWebRequest());
return kernel.Resolve(serviceType);
}
return null;
}
}
Распознаватель зависимость устанавливается в Global.asax.cs:
var dependencyResolver = new WindsorDependencyResolver(container.Kernel);
DependencyResolver.SetResolver(dependencyResolver);
Когда какой-либо вид экземпляра (Index.cshtml) метод GetService из распознавателя зависимостей называется и вид создается контейнером. Для _Layout.cshtml этот метод не вызывается.
Так что, когда я делаю это в Index.cshtml: @Localizer.Localize(....)
служба localizaer не равно нулю, но в _Layout.cshtml это null
, конкретная проблема в том, я ничего не могу локализовать в представлении (и я не хочу для просмотра каждого поддерживаемого языкового стандарта).
Надеюсь, теперь это яснее.
Edit: Еще нет четкого ответа на этот ... у меня не было времени, чтобы проверить источники MVC, но ответ должен быть там наверняка ...
Почему вы пытаетесь найти информацию о вашем сервисе? – Hammerstein
Лучшим примером может служить служба локализации. – Padel
Я сталкиваюсь с той же проблемой. Вам повезло разобраться в этом? – BrooklynDev