У меня была ситуация, когда я соединял две таблицы, обе таблицы были разделены. Запрос использовал индекс для первой таблицы, но выполнил полное сканирование таблицы во второй таблице. Я добавил подсказку для использования индекса на второй таблице. С этой подсказкой план объяснения показал запрос с использованием индекса во второй таблице.
Если у вас есть индекс для T2.ID, я предлагаю вам добавить подсказку к вашему запросу для этого индекса.
Регистратор является установкой регистрирующимся средством, которое находится в <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>
Так как у Вас есть общественная собственность с Методом set, каждый раз, когда Вы разрешаете свой объект из Виндзора, это также попытается установить любые общественные собственности с соответствующими значениями от контейнера (в Вашем случае, ILogger, который Ваше средство заполнит в Виндзор).
Значение при разрешении Класса из Виндзора это будет установлено. Но не, если Вы делаете новый Класс ().
Это по крайней мере, как я понимаю это.
Другой подход должен использовать конструкторов, означая, назвали ли Вам конструктора
общедоступный Класс (регистратор ILogger) это инстанцируют с ILogger в качестве параметра.
Пример:
var yourClassObject = Kernel.Resolve<IClass>();
ЕСЛИ у Вас не будет интерфейсной спецификации (и зарегистрированный как таковой), то необходимо будет зарегистрировать компонент как конкретный тип, если Вы захотите разрешить его с помощью того конкретного типа (а не интерфейсом).
Вы также можете настроить это программно, когда инициализируете 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; }
}