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
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas si ce que vous cherchez, mais je l'ai vu il y a quelques mois et on m'a rappelé quand j'ai vu votre question. Je n'ai pas utilisé l'Unité, donc je ne peux pas vraiment comparer ce que vous avez publié avec ce qui est pour le lien. J'espère que ce sera utile pour vous:
http://davidkeaveny.blogspot.com/2011/03/unity-and-log4net.html
J'ai essayé d'obtenir le même résultat de pouvoir les insérer correctement configuré
ILog
instances dans une dépendance à l'aide du constructeur d'injection avec l'Unité.En fin de compte, j'ai écrit mon propre "log4net" l'unité de l'extension à faire exactement cela (en partie inspiré par un billet de blog qu'un autre répondeur, Kenneth Baltrinic, écrit).
Cela vous permet d'enregistrer l'extension une fois avec l'Unité:
et puis d'avoir le bon ILog enregistreur instance passée:
L'extension peut être trouvé ici:
https://github.com/roblevine/UnityLoggingExtensions
Plus d'infos ici: http://blog.roblevine.co.uk/net/using-log4net-with-unity/
MODIFIER ce est maintenant disponible comme une Package NuGet
Après des heures de creuser autour de l'Unité de code source, j'ai trouvé la solution suivante. Cependant, je préfère trouver une façon appropriée pour régler le solveur de dépendances en fonction du type d'être résolu au lieu d'écraser le constructeur par défaut sélecteur de politique. Pour l'un, parce que j'ai déjà changé le constructeur par défaut sélecteur à d'autres fins. Pour un autre, cette solution ne gère les dépendances qui sont injectés par le constructeur. Pour une couverture complète, il faudrait remplacer la valeur par défaut de la propriété et de la méthode de sélecteurs ainsi je présume. Pour moi, j'ai seulement besoin de constructeurs.
L'extension fonctionne bien, mais d'autres informations de configuration est nécessaire pour MVC5 utilisateurs. Voici les étapes à l'aide de l'unité.
Ajouter la ligne suivante au début de votre démarrage.cs classe au-dessus de l'espace de noms.
Dans votre global.asax
application_startup
méthode ajouter les informations suivantes:Le reste de la configuration de l'unité de conteneur doit être aussi est:
Vous assurer d'avoir un
appender
ajouté à votre site web.config. Qui devrait être sur elle pour le faire fonctionner correctement. Bonne Chance