| #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 |
| { |
| /// <summary> |
| /// Base class for all log4net configuration attributes. |
| /// </summary> |
| /// <remarks> |
| /// 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. |
| /// </remarks> |
| /// <author>Nicko Cadell</author> |
| /// <author>Gert Driesen</author> |
| [AttributeUsage(AttributeTargets.Assembly)] |
| public abstract class ConfiguratorAttribute : Attribute, IComparable |
| { |
| private int m_priority = 0; |
| |
| /// <summary> |
| /// Constructor used by subclasses. |
| /// </summary> |
| /// <param name="priority">the ordering priority for this configurator</param> |
| /// <remarks> |
| /// <para> |
| /// The <paramref name="priority"/> is used to order the configurator |
| /// attributes before they are invoked. Higher priority configurators are executed |
| /// before lower priority ones. |
| /// </para> |
| /// </remarks> |
| protected ConfiguratorAttribute(int priority) |
| { |
| m_priority = priority; |
| } |
| |
| /// <summary> |
| /// Configures the <see cref="ILoggerRepository"/> for the specified assembly. |
| /// </summary> |
| /// <param name="sourceAssembly">The assembly that this attribute was defined on.</param> |
| /// <param name="targetRepository">The repository to configure.</param> |
| /// <remarks> |
| /// <para> |
| /// Abstract method implemented by a subclass. When this method is called |
| /// the subclass should configure the <paramref name="targetRepository"/>. |
| /// </para> |
| /// </remarks> |
| public abstract void Configure(Assembly sourceAssembly, ILoggerRepository targetRepository); |
| |
| /// <summary> |
| /// Compare this instance to another ConfiguratorAttribute |
| /// </summary> |
| /// <param name="obj">the object to compare to</param> |
| /// <returns>see <see cref="IComparable.CompareTo"/></returns> |
| /// <remarks> |
| /// <para> |
| /// Compares the priorities of the two <see cref="ConfiguratorAttribute"/> instances. |
| /// Sorts by priority in descending order. Objects with the same priority are |
| /// randomly ordered. |
| /// </para> |
| /// </remarks> |
| 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 |