blob: 55e393a3fc5bfd76abc946dddc9306b9c4e87fed [file] [log] [blame]
#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
using System;
using System.Reflection;
using log4net.Repository;
namespace log4net.Core
{
#region LoggerRepositoryCreationEvent
/// <summary>
/// Delegate used to handle logger repository creation event notifications
/// </summary>
/// <param name="sender">The <see cref="IRepositorySelector"/> which created the repository.</param>
/// <param name="e">The <see cref="LoggerRepositoryCreationEventArgs"/> event args
/// that holds the <see cref="ILoggerRepository"/> instance that has been created.</param>
/// <remarks>
/// <para>
/// Delegate used to handle logger repository creation event notifications.
/// </para>
/// </remarks>
public delegate void LoggerRepositoryCreationEventHandler(object sender, LoggerRepositoryCreationEventArgs e);
/// <summary>
/// Provides data for the <see cref="IRepositorySelector.LoggerRepositoryCreatedEvent"/> event.
/// </summary>
/// <remarks>
/// <para>
/// A <see cref="IRepositorySelector.LoggerRepositoryCreatedEvent"/>
/// event is raised every time a <see cref="ILoggerRepository"/> is created.
/// </para>
/// </remarks>
public class LoggerRepositoryCreationEventArgs : EventArgs
{
/// <summary>
/// The <see cref="ILoggerRepository"/> created
/// </summary>
private ILoggerRepository m_repository;
/// <summary>
/// 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;
}
/// <summary>
/// The <see cref="ILoggerRepository"/> that has been created
/// </summary>
/// <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; }
}
}
#endregion
/// <summary>
/// Interface used by the <see cref="LogManager"/> to select the <see cref="ILoggerRepository"/>.
/// </summary>
/// <remarks>
/// <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>
public interface IRepositorySelector
{
/// <summary>
/// Gets 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>
/// <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 named <see cref="ILoggerRepository"/>.
/// </summary>
/// <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="M:CreateRepository(string,Type)"/>.
/// </remarks>
ILoggerRepository GetRepository(string repositoryName);
/// <summary>
/// Creates a new repository for the assembly specified.
/// </summary>
/// <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
/// specified such that a call to <see cref="M:GetRepository(Assembly)"/> with the
/// 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 assembly, Type repositoryType);
/// <summary>
/// Creates a new repository with the name specified.
/// </summary>
/// <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 name
/// specified such that a call to <see cref="M:GetRepository(string)"/> with the
/// 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="M:CreateRepository(Assembly, Type)"/>
/// to create a new repository and <see cref="M:GetRepository(Assembly)"/> to retrieve
/// a repository.
/// </para>
/// </remarks>
bool ExistsRepository(string repositoryName);
/// <summary>
/// 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>
/// Event to notify that a logger repository has been created.
/// </summary>
/// <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;
}
}