Где и замок How Windsor строит регистрирующееся сооружение

У меня была ситуация, когда я соединял две таблицы, обе таблицы были разделены. Запрос использовал индекс для первой таблицы, но выполнил полное сканирование таблицы во второй таблице. Я добавил подсказку для использования индекса на второй таблице. С этой подсказкой план объяснения показал запрос с использованием индекса во второй таблице.
Если у вас есть индекс для T2.ID, я предлагаю вам добавить подсказку к вашему запросу для этого индекса.

10
задан vdhant 29 October 2008 в 00:17
поделиться

3 ответа

Регистратор является установкой регистрирующимся средством, которое находится в <facilities> раздел конфигурации. Например, для использования log4net приложение или web.config выглядели бы примерно так:

<?xml version="1.0"?>
<configuration>
    <configSections>
        <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor"/>
    </configSections>
<Configuration>

<castle>

    <facilities>
        <facility id="loggingfacility" 
             type="Castle.Facilities.Logging.LoggingFacility, Castle.Facilities.Logging" 
             loggingApi="log4net" 
             configFile="logging.config" />
    </facilities>

</castle>
</configuration>
12
ответ дан 3 December 2019 в 16:55
поделиться

Так как у Вас есть общественная собственность с Методом set, каждый раз, когда Вы разрешаете свой объект из Виндзора, это также попытается установить любые общественные собственности с соответствующими значениями от контейнера (в Вашем случае, ILogger, который Ваше средство заполнит в Виндзор).

Значение при разрешении Класса из Виндзора это будет установлено. Но не, если Вы делаете новый Класс ().

Это по крайней мере, как я понимаю это.

Другой подход должен использовать конструкторов, означая, назвали ли Вам конструктора

общедоступный Класс (регистратор ILogger) это инстанцируют с ILogger в качестве параметра.

Пример:


var yourClassObject = Kernel.Resolve<IClass>();

ЕСЛИ у Вас не будет интерфейсной спецификации (и зарегистрированный как таковой), то необходимо будет зарегистрировать компонент как конкретный тип, если Вы захотите разрешить его с помощью того конкретного типа (а не интерфейсом).

1
ответ дан 3 December 2019 в 16:55
поделиться

Вы также можете настроить это программно, когда инициализируете windsor (например, из вашего global.asax.cs):

container.AddFacility("logging",  new LoggingFacility(LoggerImplementation.Log4net));

Конечно, вы можете выбрать любую из имплементаций регистратора.

Это это будет подключаться всякий раз, когда windsor создает экземпляр любого класса, ожидающего регистратора. Я бы не стал помещать это в конструктор, поскольку это сквозная проблема - лучше поступить так, как вы, на мой взгляд, предложили. Вы можете немного упростить его:

    private ILogger logger = NullLogger.Instance;
    public ILogger Logger
    {
        get { return logger; }
        set { logger = value; }
    }
11
ответ дан 3 December 2019 в 16:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: