Так номер 1 выше . , Что такое Инверсия Управления?
Обслуживание является вещью номер один, которую оно решает для меня. Это гарантирует, что я использую интерфейсы так, чтобы два класса не были близкими друг с другом.
В использовании контейнера как замок Windsor, это решает проблемы обслуживания еще лучше. Способность выгрузить компонент, который переходит к базе данных для той, которая использует основанную на файле персистентность, не изменяя строку кода, является потрясающей (изменение конфигурации, Вы сделаны).
И как только Вы входите в дженерики, это становится еще лучше. Предположите иметь издателя сообщения, который получает записи и публикует сообщения. Это не заботится о том, что это публикует, но этому нужен картопостроитель для взятия чего-то от записи до сообщения.
public class MessagePublisher
{
public MessagePublisher(IMapper mapper,IRemoteEndpoint endPointToSendTo)
{
//setup
}
}
я записал его однажды, но теперь я могу ввести много типов в этот набор кода, если я публикую различные типы сообщений. Я могу также записать картопостроители, которые берут запись того же типа и отображают их на различные сообщения. Используя DI с Дженериками дал мне способность записать очень мало кода для выполнения многих задач.
, О, да, существуют проблемы тестируемости, но они вторичны к преимуществам МОК/DI.
я определенно люблю МОК/DI.
3. Это становится более соответствующим минута, у Вас есть проект среднего размера несколько большей сложности. Я сказал бы, что это становится соответствующим минута, Вы начинаете чувствовать боль.
Вам нужно использовать свойство аддитивности . См. Пример здесь . Вам необходимо определить два регистратора.
Чтобы получить очень специфическую фильтрацию для приложения, вам необходимо настроить LevelMatchFilter
или LevelRangeFilter
для приложения файла журнала, чтобы фильтровать события, которые фактически вывод.
Например:
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR"/>
<levelMax value="FATAL"/>
</filter>
или
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="ERROR"/>
</filter>
поместите один из них в свой тег
, и это должно сработать для вас:
<appender name="LogFileAppender" type="log4net.Appender.FileAppender,log4net" >
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="ERROR"/>
</filter>
<param name="File" value="log.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d %M - %m%n" />
</layout>
<threshold value="ERROR"/>
</appender>
Примечание. Обновлено, чтобы удалить ошибку, указанную kgiannakakis.