#region Apache License // // Licensed to the Apache Software Foundation (ASF) under one or more // contributor license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright ownership. // The ASF licenses this file to you under the Apache License, Version 2.0 // (the "License"); you may not use this file except in compliance with // the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #endregion // .NET Compact Framework 1.0 has no support for reading assembly attributes #if !NETCF using System; using System.Reflection; using log4net.Repository; namespace log4net.Config { /// /// Base class for all log4net configuration attributes. /// /// /// This is an abstract class that must be extended by /// specific configurators. This attribute allows the /// configurator to be parameterized by an assembly level /// attribute. /// /// Nicko Cadell /// Gert Driesen [AttributeUsage(AttributeTargets.Assembly)] public abstract class ConfiguratorAttribute : Attribute, IComparable { private int m_priority = 0; /// /// Constructor used by subclasses. /// /// the ordering priority for this configurator /// /// /// The is used to order the configurator /// attributes before they are invoked. Higher priority configurators are executed /// before lower priority ones. /// /// protected ConfiguratorAttribute(int priority) { m_priority = priority; } /// /// Configures the for the specified assembly. /// /// The assembly that this attribute was defined on. /// The repository to configure. /// /// /// Abstract method implemented by a subclass. When this method is called /// the subclass should configure the . /// /// public abstract void Configure(Assembly sourceAssembly, ILoggerRepository targetRepository); /// /// Compare this instance to another ConfiguratorAttribute /// /// the object to compare to /// see /// /// /// Compares the priorities of the two instances. /// Sorts by priority in descending order. Objects with the same priority are /// randomly ordered. /// /// public int CompareTo(object obj) { // Reference equals if ((object)this == obj) { return 0; } int result = -1; ConfiguratorAttribute target = obj as ConfiguratorAttribute; if (target != null) { // Compare the priorities result = target.m_priority.CompareTo(m_priority); if (result == 0) { // Same priority, so have to provide some ordering result = -1; } } return result; } } } #endif //!NETCF