Могу ли я переопределить поведение разрешения (разрешения) замка? - PullRequest
0 голосов
/ 24 октября 2019

Возможно, мой вопрос очень прост, но я действительно застрял в этом разделе. Я хочу изменить поведение функции разрешения замка Виндзора, и я посмотрел на соответствующие ответы на этом сайте, но не помог мне.

На самом деле, если вы хотите услышать реальную проблему, я хочу понять жизненный цикл функции разрешения замка. Кроме того, я знаю, что когда я добавляю подрезольвер в модуль ядра, 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, равная

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