logging-log4net-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ni...@apache.org
Subject cvs commit: logging-log4net/src/Core IRepositorySelector.cs CompactRepositorySelector.cs DefaultRepositorySelector.cs
Date Mon, 06 Dec 2004 02:19:10 GMT
nicko       2004/12/05 18:19:10

  Modified:    src/Core IRepositorySelector.cs CompactRepositorySelector.cs
                        DefaultRepositorySelector.cs
  Log:
  Added ExistsReposiotry method to IRepositorySelector. Updated doc comments
  
  Revision  Changes    Path
  1.3       +91 -22    logging-log4net/src/Core/IRepositorySelector.cs
  
  Index: IRepositorySelector.cs
  ===================================================================
  RCS file: /home/cvs/logging-log4net/src/Core/IRepositorySelector.cs,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- IRepositorySelector.cs	16 Feb 2004 02:10:52 -0000	1.2
  +++ IRepositorySelector.cs	6 Dec 2004 02:19:09 -0000	1.3
  @@ -32,7 +32,9 @@
   	/// <param name="e">The <see cref="LoggerRepositoryCreationEventArgs"/> event
args
   	/// that holds the <see cref="ILoggerRepository"/> instance that has been created.</param>
   	/// <remarks>
  -	/// Delegate used to handle logger repository creation event notifications
  +	/// <para>
  +	/// Delegate used to handle logger repository creation event notifications.
  +	/// </para>
   	/// </remarks>
   	public delegate void LoggerRepositoryCreationEventHandler(object sender, LoggerRepositoryCreationEventArgs
e);
   
  @@ -40,8 +42,10 @@
   	/// Provides data for the <see cref="IRepositorySelector.LoggerRepositoryCreatedEvent"/>
event.
   	/// </summary>
   	/// <remarks>
  -	/// A <see cref="IRepositorySelector.LoggerRepositoryCreatedEvent"/> event is raised
every time a
  -	/// <see cref="ILoggerRepository"/> is created.
  +	/// <para>
  +	/// A <see cref="IRepositorySelector.LoggerRepositoryCreatedEvent"/> 
  +	/// event is raised every time a <see cref="ILoggerRepository"/> is created.
  +	/// </para>
   	/// </remarks>
   	public class LoggerRepositoryCreationEventArgs : EventArgs
   	{
  @@ -54,6 +58,11 @@
   		/// Construct instance using <see cref="ILoggerRepository"/> specified
   		/// </summary>
   		/// <param name="repository">the <see cref="ILoggerRepository"/> that has
been created</param>
  +		/// <remarks>
  +		/// <para>
  +		/// Construct instance using <see cref="ILoggerRepository"/> specified
  +		/// </para>
  +		/// </remarks>
   		public LoggerRepositoryCreationEventArgs(ILoggerRepository repository)
   		{
   			m_repository = repository;
  @@ -65,6 +74,11 @@
   		/// <value>
   		/// The <see cref="ILoggerRepository"/> that has been created
   		/// </value>
  +		/// <remarks>
  +		/// <para>
  +		/// The <see cref="ILoggerRepository"/> that has been created
  +		/// </para>
  +		/// </remarks>
   		public ILoggerRepository LoggerRepository
   		{
   			get { return m_repository; }
  @@ -74,11 +88,14 @@
   	#endregion
   
   	/// <summary>
  -	/// Interface used my the <see cref="LogManager"/> to select the <see cref="ILoggerRepository"/>.
  +	/// Interface used by the <see cref="LogManager"/> to select the <see cref="ILoggerRepository"/>.
   	/// </summary>
   	/// <remarks>
  -	/// The <see cref="LogManager"/> uses a <see cref="IRepositorySelector"/>
to specify the policy for
  -	/// selecting the correct <see cref="ILoggerRepository"/> to return to the caller.
  +	/// <para>
  +	/// The <see cref="LogManager"/> uses a <see cref="IRepositorySelector"/>

  +	/// to specify the policy for selecting the correct <see cref="ILoggerRepository"/>

  +	/// to return to the caller.
  +	/// </para>
   	/// </remarks>
   	/// <author>Nicko Cadell</author>
   	/// <author>Gert Driesen</author>
  @@ -87,49 +104,93 @@
   		/// <summary>
   		/// Gets the <see cref="ILoggerRepository"/> for the specified assembly.
   		/// </summary>
  -		/// <param name="domainAssembly">The assembly to use to lookup to the <see cref="ILoggerRepository"/></param>
  +		/// <param name="assembly">The assembly to use to lookup to the <see cref="ILoggerRepository"/></param>
   		/// <returns>The <see cref="ILoggerRepository"/> for the assembly.</returns>
  -		ILoggerRepository GetRepository(Assembly domainAssembly);
  +		/// <remarks>
  +		/// <para>
  +		/// Gets the <see cref="ILoggerRepository"/> for the specified assembly.
  +		/// </para>
  +		/// <para>
  +		/// How the association between <see cref="Assembly"/> and <see cref="ILoggerRepository"/>
  +		/// is made is not defined. The implementation may choose any method for
  +		/// this association. The results of this method must be repeatable, i.e.
  +		/// when called again with the same arguments the result must be the
  +		/// save value.
  +		/// </para>
  +		/// </remarks>
  +		ILoggerRepository GetRepository(Assembly assembly);
   
   		/// <summary>
  -		/// Gets the <see cref="ILoggerRepository"/> for the specified domain
  +		/// Gets the named <see cref="ILoggerRepository"/>.
   		/// </summary>
  -		/// <param name="domain">The domain to use to lookup to the <see cref="ILoggerRepository"/>.</param>
  -		/// <returns>The <see cref="ILoggerRepository"/> for the domain.</returns>
  -		ILoggerRepository GetRepository(string domain);
  +		/// <param name="repositoryName">The name to use to lookup to the <see cref="ILoggerRepository"/>.</param>
  +		/// <returns>The named <see cref="ILoggerRepository"/></returns>
  +		/// <remarks>
  +		/// Lookup a named <see cref="ILoggerRepository"/>. This is the repository created
by
  +		/// calling <see cref="CreateRepository(string,Type)"/>.
  +		/// </remarks>
  +		ILoggerRepository GetRepository(string repositoryName);
   
   		/// <summary>
   		/// Creates a new repository for the assembly specified.
   		/// </summary>
  -		/// <param name="domainAssembly">The assembly to use to create the domain to associate
with the <see cref="ILoggerRepository"/>.</param>
  +		/// <param name="assembly">The assembly to use to create the domain to associate
with the <see cref="ILoggerRepository"/>.</param>
   		/// <param name="repositoryType">The type of repository to create, must implement
<see cref="ILoggerRepository"/>.</param>
   		/// <returns>The repository created.</returns>
   		/// <remarks>
  -		/// <para>The <see cref="ILoggerRepository"/> created will be associated
with the domain
  +		/// <para>
  +		/// The <see cref="ILoggerRepository"/> created will be associated with the domain
   		/// specified such that a call to <see cref="GetRepository(Assembly)"/> with the
  -		/// same assembly specified will return the same repository instance.</para>
  +		/// same assembly specified will return the same repository instance.
  +		/// </para>
  +		/// <para>
  +		/// How the association between <see cref="Assembly"/> and <see cref="ILoggerRepository"/>
  +		/// is made is not defined. The implementation may choose any method for
  +		/// this association.
  +		/// </para>
   		/// </remarks>
  -		ILoggerRepository CreateRepository(Assembly domainAssembly, Type repositoryType);
  +		ILoggerRepository CreateRepository(Assembly assembly, Type repositoryType);
   
   		/// <summary>
  -		/// Creates a new repository for the domain specified.
  +		/// Creates a new repository with the name specified.
   		/// </summary>
  -		/// <param name="domain">The domain to associate with the <see cref="ILoggerRepository"/>.</param>
  +		/// <param name="repositoryName">The name to associate with the <see cref="ILoggerRepository"/>.</param>
   		/// <param name="repositoryType">The type of repository to create, must implement
<see cref="ILoggerRepository"/>.</param>
   		/// <returns>The repository created.</returns>
   		/// <remarks>
  -		/// <para>The <see cref="ILoggerRepository"/> created will be associated
with the domain
  +		/// <para>
  +		/// The <see cref="ILoggerRepository"/> created will be associated with the name
   		/// specified such that a call to <see cref="GetRepository(string)"/> with the
  -		/// same domain specified will return the same repository instance.</para>
  +		/// same name will return the same repository instance.
  +		/// </para>
  +		/// </remarks>
  +		ILoggerRepository CreateRepository(string repositoryName, Type repositoryType);
  +
  +		/// <summary>
  +		/// Test if a named repository exists
  +		/// </summary>
  +		/// <param name="repositoryName">the named repository to check</param>
  +		/// <returns><c>true</c> if the repository exists</returns>
  +		/// <remarks>
  +		/// <para>
  +		/// Test if a named repository exists. Use <see cref="CreateRepository"/>
  +		/// to create a new repository and <see cref="GetRepository"/> to retrieve 
  +		/// a repository.
  +		/// </para>
   		/// </remarks>
  -		ILoggerRepository CreateRepository(string domain, Type repositoryType);
  +		bool ExistsRepository(string repositoryName);
   
   		/// <summary>
  -		/// Gets the list of currently defined repositories.
  +		/// Gets an array of all currently defined repositories.
   		/// </summary>
   		/// <returns>
   		/// An array of the <see cref="ILoggerRepository"/> instances created by 
   		/// this <see cref="IRepositorySelector"/>.</returns>
  +		/// <remarks>
  +		/// <para>
  +		/// Gets an array of all of the repositories created by this selector.
  +		/// </para>
  +		/// </remarks>
   		ILoggerRepository[] GetAllRepositories();
   
   		/// <summary>
  @@ -138,6 +199,14 @@
   		/// <value>
   		/// Event to notify that a logger repository has been created.
   		/// </value>
  +		/// <remarks>
  +		/// <para>
  +		/// Event raised when a new repository is created.
  +		/// The event source will be this selector. The event args will
  +		/// be a <see cref="LoggerRepositoryCreationEventArgs"/> which
  +		/// holds the newly created <see cref="ILoggerRepository"/>.
  +		/// </para>
  +		/// </remarks>
   		event LoggerRepositoryCreationEventHandler LoggerRepositoryCreatedEvent;
   	}
   }
  
  
  
  1.7       +122 -35   logging-log4net/src/Core/CompactRepositorySelector.cs
  
  Index: CompactRepositorySelector.cs
  ===================================================================
  RCS file: /home/cvs/logging-log4net/src/Core/CompactRepositorySelector.cs,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- CompactRepositorySelector.cs	1 Oct 2004 21:02:16 -0000	1.6
  +++ CompactRepositorySelector.cs	6 Dec 2004 02:19:09 -0000	1.7
  @@ -32,6 +32,16 @@
   	/// for use with the compact framework
   	/// </summary>
   	/// <remarks>
  +	/// <para>
  +	/// This <see cref="IRepositorySelector"/> implementation is a simple
  +	/// mapping between repository name and <see cref="ILoggerRepository"/>
  +	/// object.
  +	/// </para>
  +	/// <para>
  +	/// The .NET Compact Framework 1.0 does not support retrieving assembly
  +	/// level attributes therefore unlike the <c>DefaultRepositorySelector</c>
  +	/// this selector does not examine the calling assembly for attributes.
  +	/// </para>
   	/// </remarks>
   	/// <author>Nicko Cadell</author>
   	public class CompactRepositorySelector : IRepositorySelector
  @@ -40,8 +50,8 @@
   
   		private const string DefaultRepositoryName = "log4net-default-repository";
   
  -		private IDictionary m_name2repositoryMap = new Hashtable();
  -		private Type m_defaultRepositoryType;
  +		private readonly Hashtable m_name2repositoryMap = new Hashtable();
  +		private readonly Type m_defaultRepositoryType;
   
   		private event LoggerRepositoryCreationEventHandler m_loggerRepositoryCreatedEvent;
   
  @@ -53,6 +63,13 @@
   		/// Create a new repository selector
   		/// </summary>
   		/// <param name="defaultRepositoryType">the type of the repositories to create,
must implement <see cref="ILoggerRepository"/></param>
  +		/// <remarks>
  +		/// <para>
  +		/// Create an new compact repository selector.
  +		/// The default type for repositories must be specified,
  +		/// an appropriate value would be <see cref="log4net.Repository.Hierarchy.Hierarchy"/>.
  +		/// </para>
  +		/// </remarks>
   		/// <exception cref="ArgumentNullException">throw if <paramref name="defaultRepositoryType"/>
is null</exception>
   		/// <exception cref="ArgumentOutOfRangeException">throw if <paramref name="defaultRepositoryType"/>
does not implement <see cref="ILoggerRepository"/></exception>
   		public CompactRepositorySelector(Type defaultRepositoryType)
  @@ -80,38 +97,52 @@
   		/// <summary>
   		/// Get the <see cref="ILoggerRepository"/> for the specified assembly
   		/// </summary>
  -		/// <param name="assembly">the assembly to use to lookup to the <see cref="ILoggerRepository"/></param>
  -		/// <returns>The <see cref="ILoggerRepository"/> for the assembly</returns>
  +		/// <param name="assembly">not used</param>
  +		/// <returns>The default <see cref="ILoggerRepository"/></returns>
   		/// <remarks>
  -		/// <para>Assemblies use the default repository.</para>
  +		/// <para>
  +		/// The <paramref name="assembly"/> argument is not used. This selector does not
create a
  +		/// separate repository for each assembly. 
  +		/// </para>
  +		/// <para>
  +		/// As a named repository is not specified the default repository is 
  +		/// returned. The default repository is named <c>log4net-default-repository</c>.
  +		/// </para>
   		/// </remarks>
  -		/// <exception cref="ArgumentNullException">throw if <paramref name="assembly"/>
is null</exception>
   		public ILoggerRepository GetRepository(Assembly assembly)
   		{
   			return CreateRepository(assembly, m_defaultRepositoryType);
   		}
   
   		/// <summary>
  -		/// Get the <see cref="ILoggerRepository"/> for the specified repository
  +		/// Get the named <see cref="ILoggerRepository"/>
   		/// </summary>
  -		/// <param name="repository">the repository to use to lookup to the <see cref="ILoggerRepository"/></param>
  -		/// <returns>The <see cref="ILoggerRepository"/> for the repository</returns>
  -		/// <exception cref="ArgumentNullException">throw if <paramref name="repository"/>
is null</exception>
  -		/// <exception cref="LogException">throw if the <paramref name="repository"/>
does not exist</exception>
  -		public ILoggerRepository GetRepository(string repository)
  +		/// <param name="repositoryName">the name of the repository to lookup</param>
  +		/// <returns>The named <see cref="ILoggerRepository"/></returns>
  +		/// <remarks>
  +		/// <para>
  +		/// Get the named <see cref="ILoggerRepository"/>. The default 
  +		/// repository is <c>log4net-default-repository</c>. Other repositories 
  +		/// must be created using the <see cref="CreateRepository(string,Type)"/>.
  +		/// If the named repository does not exist an exception is thrown.
  +		/// </para>
  +		/// </remarks>
  +		/// <exception cref="ArgumentNullException">throw if <paramref name="repositoryName"/>
is null</exception>
  +		/// <exception cref="LogException">throw if the <paramref name="repositoryName"/>
does not exist</exception>
  +		public ILoggerRepository GetRepository(string repositoryName)
   		{
  -			if (repository == null)
  +			if (repositoryName == null)
   			{
  -				throw new ArgumentNullException("repository");
  +				throw new ArgumentNullException("repositoryName");
   			}
   
   			lock(this)
   			{
   				// Lookup in map
  -				ILoggerRepository rep = m_name2repositoryMap[repository] as ILoggerRepository;
  +				ILoggerRepository rep = m_name2repositoryMap[repositoryName] as ILoggerRepository;
   				if (rep == null)
   				{
  -					throw new LogException("Repository ["+repository+"] is NOT defined.");
  +					throw new LogException("Repository ["+repositoryName+"] is NOT defined.");
   				}
   				return rep;
   			}
  @@ -120,17 +151,23 @@
   		/// <summary>
   		/// Create a new repository for the assembly specified 
   		/// </summary>
  -		/// <param name="assembly">the assembly to use to create the repository to associate
with the <see cref="ILoggerRepository"/></param>
  +		/// <param name="assembly">not used</param>
   		/// <param name="repositoryType">the type of repository to create, must implement
<see cref="ILoggerRepository"/></param>
   		/// <returns>the repository created</returns>
   		/// <remarks>
  -		/// <para>The <see cref="ILoggerRepository"/> created will be associated
with the repository
  -		/// specified such that a call to <see cref="GetRepository(Assembly)"/> with the
  -		/// same assembly specified will return the same repository instance.</para>
  -		/// 
  -		/// <para>Assemblies use the default repository.</para>
  +		/// <para>
  +		/// The <paramref name="assembly"/> argument is not used. This selector does not
create a
  +		/// separate repository for each assembly. 
  +		/// </para>
  +		/// <para>
  +		/// If the <paramref name="repositoryType"/> is <c>null</c> then the
  +		/// default repository type specified to the constructor is used.
  +		/// </para>
  +		/// <para>
  +		/// As a named repository is not specified the default repository is 
  +		/// returned. The default repository is named <c>log4net-default-repository</c>.
  +		/// </para>
   		/// </remarks>
  -		/// <exception cref="ArgumentNullException">throw if <paramref name="assembly"/>
is null</exception>
   		public ILoggerRepository CreateRepository(Assembly assembly, Type repositoryType)
   		{
   			// If the type is not set then use the default type
  @@ -141,6 +178,8 @@
   
   			lock(this)
   			{
  +				// This method should not throw if the default repository already exists.
  +
   				// First check that the repository does not exist
   				ILoggerRepository rep = m_name2repositoryMap[DefaultRepositoryName] as ILoggerRepository;
   				if (rep == null)
  @@ -156,22 +195,31 @@
   		/// <summary>
   		/// Create a new repository for the repository specified
   		/// </summary>
  -		/// <param name="repository">the repository to associate with the <see cref="ILoggerRepository"/></param>
  +		/// <param name="repositoryName">the repository to associate with the <see cref="ILoggerRepository"/></param>
   		/// <param name="repositoryType">the type of repository to create, must implement
<see cref="ILoggerRepository"/>.
   		/// If this param is null then the default repository type is used.</param>
   		/// <returns>the repository created</returns>
   		/// <remarks>
  +		/// <para>
   		/// The <see cref="ILoggerRepository"/> created will be associated with the repository
   		/// specified such that a call to <see cref="GetRepository(string)"/> with the
   		/// same repository specified will return the same repository instance.
  +		/// </para>
  +		/// <para>
  +		/// If the named repository already exists an exception will be thrown.
  +		/// </para>
  +		/// <para>
  +		/// If <paramref name="repositoryType"/> is <c>null</c> then the default

  +		/// repository type specified to the constructor is used.
  +		/// </para>
   		/// </remarks>
  -		/// <exception cref="ArgumentNullException">throw if <paramref name="repository"/>
is null</exception>
  -		/// <exception cref="LogException">throw if the <paramref name="repository"/>
already exists</exception>
  -		public ILoggerRepository CreateRepository(string repository, Type repositoryType)
  +		/// <exception cref="ArgumentNullException">throw if <paramref name="repositoryName"/>
is null</exception>
  +		/// <exception cref="LogException">throw if the <paramref name="repositoryName"/>
already exists</exception>
  +		public ILoggerRepository CreateRepository(string repositoryName, Type repositoryType)
   		{
  -			if (repository == null)
  +			if (repositoryName == null)
   			{
  -				throw new ArgumentNullException("repository");
  +				throw new ArgumentNullException("repositoryName");
   			}
   
   			// If the type is not set then use the default type
  @@ -185,23 +233,23 @@
   				ILoggerRepository rep = null;
   
   				// First check that the repository does not exist
  -				rep = m_name2repositoryMap[repository] as ILoggerRepository;
  +				rep = m_name2repositoryMap[repositoryName] as ILoggerRepository;
   				if (rep != null)
   				{
  -					throw new LogException("Repository ["+repository+"] is already defined. Repositories
cannot be redefined.");
  +					throw new LogException("Repository ["+repositoryName+"] is already defined. Repositories
cannot be redefined.");
   				}
   				else
   				{
  -					LogLog.Debug("DefaultRepositorySelector: Creating repository ["+repository+"] using
type ["+repositoryType+"]");
  +					LogLog.Debug("DefaultRepositorySelector: Creating repository ["+repositoryName+"]
using type ["+repositoryType+"]");
   
   					// Call the no arg constructor for the repositoryType
   					rep = (ILoggerRepository)Activator.CreateInstance(repositoryType);
   
   					// Set the name of the repository
  -					rep.Name = repository;
  +					rep.Name = repositoryName;
   
   					// Store in map
  -					m_name2repositoryMap[repository] = rep;
  +					m_name2repositoryMap[repositoryName] = rep;
   
   					// Notify listeners that the repository has been created
   					OnLoggerRepositoryCreatedEvent(rep);
  @@ -212,9 +260,34 @@
   		}
   
   		/// <summary>
  -		/// Copy the list of <see cref="ILoggerRepository"/> objects
  +		/// Test if a named repository exists
  +		/// </summary>
  +		/// <param name="repositoryName">the named repository to check</param>
  +		/// <returns><c>true</c> if the repository exists</returns>
  +		/// <remarks>
  +		/// <para>
  +		/// Test if a named repository exists. Use <see cref="CreateRepository"/>
  +		/// to create a new repository and <see cref="GetRepository"/> to retrieve 
  +		/// a repository.
  +		/// </para>
  +		/// </remarks>
  +		public bool ExistsRepository(string repositoryName)
  +		{
  +			lock(this)
  +			{
  +				return m_name2repositoryMap.ContainsKey(repositoryName);
  +			}
  +		}
  +
  +		/// <summary>
  +		/// Gets a list of <see cref="ILoggerRepository"/> objects
   		/// </summary>
   		/// <returns>an array of all known <see cref="ILoggerRepository"/> objects</returns>
  +		/// <remarks>
  +		/// <para>
  +		/// Gets an array of all of the repositories created by this selector.
  +		/// </para>
  +		/// </remarks>
   		public ILoggerRepository[] GetAllRepositories()
   		{
   			lock(this)
  @@ -234,6 +307,14 @@
   		/// <value>
   		/// Event to notify that a logger repository has been created.
   		/// </value>
  +		/// <remarks>
  +		/// <para>
  +		/// Event raised when a new repository is created.
  +		/// The event source will be this selector. The event args will
  +		/// be a <see cref="LoggerRepositoryCreationEventArgs"/> which
  +		/// holds the newly created <see cref="ILoggerRepository"/>.
  +		/// </para>
  +		/// </remarks>
   		public event LoggerRepositoryCreationEventHandler LoggerRepositoryCreatedEvent
   		{
   			add { m_loggerRepositoryCreatedEvent += value; }
  @@ -244,6 +325,12 @@
   		/// Notify the registered listeners that the repository has been created
   		/// </summary>
   		/// <param name="repository">The repository that has been created</param>
  +		/// <remarks>
  +		/// <para>
  +		/// Raises the <event cref="LoggerRepositoryCreatedEvent">LoggerRepositoryCreatedEvent</event>
  +		/// event.
  +		/// </para>
  +		/// </remarks>
   		protected virtual void OnLoggerRepositoryCreatedEvent(ILoggerRepository repository)
   		{
   			LoggerRepositoryCreationEventHandler handler = m_loggerRepositoryCreatedEvent;
  
  
  
  1.10      +89 -30    logging-log4net/src/Core/DefaultRepositorySelector.cs
  
  Index: DefaultRepositorySelector.cs
  ===================================================================
  RCS file: /home/cvs/logging-log4net/src/Core/DefaultRepositorySelector.cs,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- DefaultRepositorySelector.cs	15 Nov 2004 02:51:46 -0000	1.9
  +++ DefaultRepositorySelector.cs	6 Dec 2004 02:19:09 -0000	1.10
  @@ -35,8 +35,10 @@
   	/// The default implementation of the <see cref="IRepositorySelector"/> interface.
   	/// </summary>
   	/// <remarks>
  +	/// <para>
   	/// Uses attributes defined on the calling assembly to determine how to
   	/// configure the hierarchy for the repository.
  +	/// </para>
   	/// </remarks>
   	/// <author>Nicko Cadell</author>
   	/// <author>Gert Driesen</author>
  @@ -50,6 +52,14 @@
   		/// <value>
   		/// Event to notify that a logger repository has been created.
   		/// </value>
  +		/// <remarks>
  +		/// <para>
  +		/// Event raised when a new repository is created.
  +		/// The event source will be this selector. The event args will
  +		/// be a <see cref="LoggerRepositoryCreationEventArgs"/> which
  +		/// holds the newly created <see cref="ILoggerRepository"/>.
  +		/// </para>
  +		/// </remarks>
   		public event LoggerRepositoryCreationEventHandler LoggerRepositoryCreatedEvent 
   		{
   			add { m_loggerRepositoryCreatedEvent += value; }
  @@ -64,6 +74,13 @@
   		/// Creates a new repository selector.
   		/// </summary>
   		/// <param name="defaultRepositoryType">The type of the repositories to create,
must implement <see cref="ILoggerRepository"/></param>
  +		/// <remarks>
  +		/// <para>
  +		/// Create an new repository selector.
  +		/// The default type for repositories must be specified,
  +		/// an appropriate value would be <see cref="log4net.Repository.Hierarchy.Hierarchy"/>.
  +		/// </para>
  +		/// </remarks>
   		/// <exception cref="ArgumentNullException"><paramref name="defaultRepositoryType"/>
is <see langword="null" />.</exception>
   		/// <exception cref="ArgumentOutOfRangeException"><paramref name="defaultRepositoryType"/>
does not implement <see cref="ILoggerRepository"/>.</exception>
   		public DefaultRepositorySelector(Type defaultRepositoryType)
  @@ -109,8 +126,8 @@
   		/// the <paramref name="assembly"/>.
   		/// </para>
   		/// </remarks>
  -		/// <exception cref="ArgumentNullException"><paramref name="assembly"/> is
<see langword="null" />.</exception>
   		/// <returns>The <see cref="ILoggerRepository"/> for the assembly</returns>
  +		/// <exception cref="ArgumentNullException"><paramref name="assembly"/> is
<see langword="null" />.</exception>
   		public ILoggerRepository GetRepository(Assembly repositoryAssembly)
   		{
   			if (repositoryAssembly == null)
  @@ -123,24 +140,34 @@
   		/// <summary>
   		/// Gets the <see cref="ILoggerRepository"/> for the specified repository.
   		/// </summary>
  -		/// <param name="repository">The repository to use to lookup the <see cref="ILoggerRepository"/>.</param>
  +		/// <param name="repositoryName">The repository to use to lookup the <see cref="ILoggerRepository"/>.</param>
   		/// <returns>The <see cref="ILoggerRepository"/> for the specified repository.</returns>
  -		/// <exception cref="ArgumentNullException"><paramref name="repository"/>
is <see langword="null" />.</exception>
  -		/// <exception cref="LogException"><paramref name="repository"/> does not
exist.</exception>
  -		public ILoggerRepository GetRepository(string repository)
  +		/// <remarks>
  +		/// <para>
  +		/// Returns the named repository. If <paramref name="repositoryName"/> is <c>null</c>
  +		/// a <see cref="ArgumentNullException"/> is thrown. If the repository 
  +		/// does not exist a <see cref="LogException"/> is thrown.
  +		/// </para>
  +		/// <para>
  +		/// Use <see cref="CreateRepository(string,Type)"/> to create a repository.
  +		/// </para>
  +		/// </remarks>
  +		/// <exception cref="ArgumentNullException"><paramref name="repositoryName"/>
is <see langword="null" />.</exception>
  +		/// <exception cref="LogException"><paramref name="repositoryName"/> does
not exist.</exception>
  +		public ILoggerRepository GetRepository(string repositoryName)
   		{
  -			if (repository == null)
  +			if (repositoryName == null)
   			{
  -				throw new ArgumentNullException("repository");
  +				throw new ArgumentNullException("repositoryName");
   			}
   
   			lock(this)
   			{
   				// Lookup in map
  -				ILoggerRepository rep = m_name2repositoryMap[repository] as ILoggerRepository;
  +				ILoggerRepository rep = m_name2repositoryMap[repositoryName] as ILoggerRepository;
   				if (rep == null)
   				{
  -					throw new LogException("Repository [" + repository + "] is NOT defined.");
  +					throw new LogException("Repository [" + repositoryName + "] is NOT defined.");
   				}
   				return rep;
   			}
  @@ -298,22 +325,24 @@
   		/// <summary>
   		/// Creates a new repository for the specified repository.
   		/// </summary>
  -		/// <param name="repository">The repository to associate with the <see cref="ILoggerRepository"/>.</param>
  +		/// <param name="repositoryName">The repository to associate with the <see cref="ILoggerRepository"/>.</param>
   		/// <param name="repositoryType">The type of repository to create, must implement
<see cref="ILoggerRepository"/>.
   		/// If this param is <see langword="null" /> then the default repository type is
used.</param>
   		/// <returns>The new repository.</returns>
   		/// <remarks>
  +		/// <para>
   		/// The <see cref="ILoggerRepository"/> created will be associated with the repository
   		/// specified such that a call to <see cref="GetRepository(string)"/> with the
   		/// same repository specified will return the same repository instance.
  +		/// </para>
   		/// </remarks>
  -		/// <exception cref="ArgumentNullException"><paramref name="repository"/>
is <see langword="null" />.</exception>
  -		/// <exception cref="LogException"><paramref name="repository"/> already
exists.</exception>
  -		public ILoggerRepository CreateRepository(string repository, Type repositoryType)
  +		/// <exception cref="ArgumentNullException"><paramref name="repositoryName"/>
is <see langword="null" />.</exception>
  +		/// <exception cref="LogException"><paramref name="repositoryName"/> already
exists.</exception>
  +		public ILoggerRepository CreateRepository(string repositoryName, Type repositoryType)
   		{
  -			if (repository == null)
  +			if (repositoryName == null)
   			{
  -				throw new ArgumentNullException("repository");
  +				throw new ArgumentNullException("repositoryName");
   			}
   
   			// If the type is not set then use the default type
  @@ -327,15 +356,15 @@
   				ILoggerRepository rep = null;
   
   				// First check that the repository does not exist
  -				rep = m_name2repositoryMap[repository] as ILoggerRepository;
  +				rep = m_name2repositoryMap[repositoryName] as ILoggerRepository;
   				if (rep != null)
   				{
  -					throw new LogException("Repository [" + repository + "] is already defined. Repositories
cannot be redefined.");
  +					throw new LogException("Repository [" + repositoryName + "] is already defined. Repositories
cannot be redefined.");
   				}
   				else
   				{
   					// Lookup an alias before trying to create the new repository
  -					ILoggerRepository aliasedRepository = m_alias2repositoryMap[repository] as ILoggerRepository;
  +					ILoggerRepository aliasedRepository = m_alias2repositoryMap[repositoryName] as ILoggerRepository;
   					if (aliasedRepository != null)
   					{
   						// Found an alias
  @@ -344,16 +373,16 @@
   						if (aliasedRepository.GetType() == repositoryType)
   						{
   							// Repository type is compatible
  -							LogLog.Debug("DefaultRepositorySelector: Aliasing repository [" + repository + "]
to existing repository [" + aliasedRepository.Name + "]");
  +							LogLog.Debug("DefaultRepositorySelector: Aliasing repository [" + repositoryName
+ "] to existing repository [" + aliasedRepository.Name + "]");
   							rep = aliasedRepository;
   
   							// Store in map
  -							m_name2repositoryMap[repository] = rep;
  +							m_name2repositoryMap[repositoryName] = rep;
   						}
   						else
   						{
   							// Invalid repository type for alias
  -							LogLog.Error("DefaultRepositorySelector: Failed to alias repository [" + repository
+ "] to existing repository ["+aliasedRepository.Name+"]. Requested repository type ["+repositoryType.FullName+"]
is not compatible with existing type [" + aliasedRepository.GetType().FullName + "]");
  +							LogLog.Error("DefaultRepositorySelector: Failed to alias repository [" + repositoryName
+ "] to existing repository ["+aliasedRepository.Name+"]. Requested repository type ["+repositoryType.FullName+"]
is not compatible with existing type [" + aliasedRepository.GetType().FullName + "]");
   
   							// We now drop through to create the repository without aliasing
   						}
  @@ -362,16 +391,16 @@
   					// If we could not find an alias
   					if (rep == null)
   					{
  -						LogLog.Debug("DefaultRepositorySelector: Creating repository [" + repository + "]
using type [" + repositoryType + "]");
  +						LogLog.Debug("DefaultRepositorySelector: Creating repository [" + repositoryName
+ "] using type [" + repositoryType + "]");
   
   						// Call the no arg constructor for the repositoryType
   						rep = (ILoggerRepository)Activator.CreateInstance(repositoryType);
   
   						// Set the name of the repository
  -						rep.Name = repository;
  +						rep.Name = repositoryName;
   
   						// Store in map
  -						m_name2repositoryMap[repository] = rep;
  +						m_name2repositoryMap[repositoryName] = rep;
   
   						// Notify listeners that the repository has been created
   						OnLoggerRepositoryCreatedEvent(rep);
  @@ -383,9 +412,34 @@
   		}
   
   		/// <summary>
  -		/// Copies the list of <see cref="ILoggerRepository"/> objects.
  +		/// Test if a named repository exists
   		/// </summary>
  -		/// <returns>An array of all known <see cref="ILoggerRepository"/> objects.</returns>
  +		/// <param name="repositoryName">the named repository to check</param>
  +		/// <returns><c>true</c> if the repository exists</returns>
  +		/// <remarks>
  +		/// <para>
  +		/// Test if a named repository exists. Use <see cref="CreateRepository"/>
  +		/// to create a new repository and <see cref="GetRepository"/> to retrieve 
  +		/// a repository.
  +		/// </para>
  +		/// </remarks>
  +		public bool ExistsRepository(string repositoryName)
  +		{
  +			lock(this)
  +			{
  +				return m_name2repositoryMap.ContainsKey(repositoryName);
  +			}
  +		}
  +
  +		/// <summary>
  +		/// Gets a list of <see cref="ILoggerRepository"/> objects
  +		/// </summary>
  +		/// <returns>an array of all known <see cref="ILoggerRepository"/> objects</returns>
  +		/// <remarks>
  +		/// <para>
  +		/// Gets an array of all of the repositories created by this selector.
  +		/// </para>
  +		/// </remarks>
   		public ILoggerRepository[] GetAllRepositories()
   		{
   			lock(this)
  @@ -470,6 +524,11 @@
   		/// Notifies the registered listeners that the repository has been created.
   		/// </summary>
   		/// <param name="repository">The repository that has been created.</param>
  +		/// <remarks>
  +		/// <para>
  +		/// Raises the <see cref="LoggerRepositoryCreatedEvent"/> event.
  +		/// </para>
  +		/// </remarks>
   		protected virtual void OnLoggerRepositoryCreatedEvent(ILoggerRepository repository) 
   		{
   			LoggerRepositoryCreationEventHandler handler = m_loggerRepositoryCreatedEvent;
  @@ -670,10 +729,10 @@
   
   		#region Private Instance Fields
   
  -		private IDictionary m_name2repositoryMap = new Hashtable();
  -		private IDictionary m_assembly2repositoryMap = new Hashtable();
  -		private IDictionary m_alias2repositoryMap = new Hashtable();
  -		private Type m_defaultRepositoryType;
  +		private readonly Hashtable m_name2repositoryMap = new Hashtable();
  +		private readonly Hashtable m_assembly2repositoryMap = new Hashtable();
  +		private readonly Hashtable m_alias2repositoryMap = new Hashtable();
  +		private readonly Type m_defaultRepositoryType;
   
   		private event LoggerRepositoryCreationEventHandler m_loggerRepositoryCreatedEvent;
   
  
  
  

Mime
View raw message