Comment Injecter des implémentations Log4Net ILog en utilisant Unity 2.0

En fin de compte cela a à voir avec la configuration de log4Net, mais de manière générique, le problème n'est pas de journalisation spécifiques.

Génériquement ce que j'essaie de comprendre, c'est comment faire, dans Microsoft Unité 2.0, quelque chose d'équivalent à ce que l'on obtient avec le Château.Des installations.La journalisation.LoggingFacility. À savoir la possibilité de déclarer une dépendance sur un enregistreur et ont l'enregistreur de données initialisée avec le Type de l'objet dans lequel elle a été injecté.

Dans l'esprit d'un test vaut mille mots, voici ce que j'ai besoin de:

class Logger_IOC_Tests
{
    //[Test] 
    public void Logger_should_be_initialized_with_the_type_of_the_object_that_is_using_it()
    {
        var container = new UnityContainer();
        /* Configuration Magic probably involiving registering either 
            * a custom IDependencyResolverPolicy or BuilderStrategy
            * goes here...
            */
        container.RegisterType<LoggerUser>(new ContainerControlledLifetimeManager());

        var user = container.Resolve<LoggerUser>();

        Assert.True(user.Logger.GetUserType() == user.GetType());
    }
}

interface ILogger
{
    Type GetUserType();
}

class Logger : ILogger
{
    private readonly Type _type;

    public Logger(Type type)
    {
        _type = type;
    }

    public Type GetUserType()
    {
        return _type;
    }
}

class LoggerUser
{
    public readonly ILogger Logger;

    public LoggerUser(ILogger logger)
    {
        Logger = logger;
    }
}

source d'informationauteur Kenneth Baltrinic