You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4net-dev@logging.apache.org by ni...@apache.org on 2004/11/15 03:51:47 UTC
cvs commit: logging-log4net/src/Core DefaultRepositorySelector.cs
nicko 2004/11/14 18:51:47
Modified: src/Config ConfiguratorAttribute.cs
XmlConfiguratorAttribute.cs
src/Core DefaultRepositorySelector.cs
Log:
Added support for priority ordered loading of ConfiguratorAttributes
Revision Changes Path
1.6 +55 -1 logging-log4net/src/Config/ConfiguratorAttribute.cs
Index: ConfiguratorAttribute.cs
===================================================================
RCS file: /home/cvs/logging-log4net/src/Config/ConfiguratorAttribute.cs,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- ConfiguratorAttribute.cs 2 Jun 2004 15:33:57 -0000 1.5
+++ ConfiguratorAttribute.cs 15 Nov 2004 02:51:46 -0000 1.6
@@ -38,14 +38,68 @@
/// <author>Nicko Cadell</author>
/// <author>Gert Driesen</author>
[AttributeUsage(AttributeTargets.Assembly)]
- public abstract class ConfiguratorAttribute : Attribute
+ 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>
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)
+ {
+ int result = -1;
+
+ if (obj != null && obj is ConfiguratorAttribute)
+ {
+ if (obj == (object)this)
+ {
+ result = 0;
+ }
+ else
+ {
+ // Compare the priorities
+ result = ((ConfiguratorAttribute)obj).m_priority.CompareTo(m_priority);
+ if (result == 0)
+ {
+ // Same priority, so have to provider some ordering
+ result = -1;
+ }
+ }
+ }
+ return result;
+ }
}
}
1.6 +7 -0 logging-log4net/src/Config/XmlConfiguratorAttribute.cs
Index: XmlConfiguratorAttribute.cs
===================================================================
RCS file: /home/cvs/logging-log4net/src/Config/XmlConfiguratorAttribute.cs,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XmlConfiguratorAttribute.cs 2 Jun 2004 15:35:18 -0000 1.5
+++ XmlConfiguratorAttribute.cs 15 Nov 2004 02:51:46 -0000 1.6
@@ -53,6 +53,13 @@
// Class is not sealed because DOMConfiguratorAttribute extends it while it is obsoleted
//
+ /// <summary>
+ /// Default constructor
+ /// </summary>
+ public XmlConfiguratorAttribute() : base(0) /* configurator priority 0 */
+ {
+ }
+
#region Public Instance Properties
/// <summary>
1.9 +3 -0 logging-log4net/src/Core/DefaultRepositorySelector.cs
Index: DefaultRepositorySelector.cs
===================================================================
RCS file: /home/cvs/logging-log4net/src/Core/DefaultRepositorySelector.cs,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- DefaultRepositorySelector.cs 1 Oct 2004 21:02:16 -0000 1.8
+++ DefaultRepositorySelector.cs 15 Nov 2004 02:51:46 -0000 1.9
@@ -570,6 +570,9 @@
object[] configAttributes = Attribute.GetCustomAttributes(assembly, typeof(log4net.Config.ConfiguratorAttribute), false);
if (configAttributes != null && configAttributes.Length > 0)
{
+ // Sort the ConfiguratorAttributes in priority order
+ Array.Sort(configAttributes);
+
// Delegate to the attribute the job of configuring the repository
foreach(log4net.Config.ConfiguratorAttribute configAttr in configAttributes)
{