Возможно, мой вопрос очень прост, но я действительно застрял в этом разделе. Я хочу изменить поведение функции разрешения замка Виндзора, и я посмотрел на соответствующие ответы на этом сайте, но не помог мне.
На самом деле, если вы хотите услышать реальную проблему, я хочу понять жизненный цикл функции разрешения замка. Кроме того, я знаю, что когда я добавляю подрезольвер в модуль ядра, Castle всегда использует распознаватель по умолчанию, а распознаватель по умолчанию - это то, чего я не хочу.
Вскоре я объясню с помощью кода.
Это моя функция начальной загрузки, она добавляет ResolverByNameConvention в список субрезолверов.
public static ContainerBootstrapper Bootstrap(IResource resource)
{
var container = new WindsorContainer();
container.Kernel.Resolver.AddSubResolver(new ResolverByNameConvention(container));
container.Install(Configuration.FromXml(resource));
return new ContainerBootstrapper(container);
}
И это то, что я использую (по крайней мере, так)
public class ResolverByNameConvention : ISubDependencyResolver
{
private readonly IWindsorContainer Container;
public ResolverByNameConvention(IWindsorContainer container)
{
Container = container;
}
public bool CanResolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model, DependencyModel dependency)
{
return true;
}
public object Resolve(CreationContext context, ISubDependencyResolver contextHandlerResolver, ComponentModel model, DependencyModel dependency)
{
return Container.Resolve<ITools>(componentId);
}
}
На самом деле я ожидаюФункция разрешения по умолчанию разрешает с помощью субрезолвера, но она (замок) разрешает распознаватель по умолчанию
Наконец, использование такое;
ISystemXslResolver xslResolver = Container.Windsor.Container.Instance.Kernel.Resolve<ISystemXslResolver>();
Если необходимо повторить это, когда я использую xslResolver iожидать, что xslResolver - это функция ResolverByNameConvention.Resolve, равная