Une erreur d’activation s’est produite lors de la tentative d’obtention d’une instance de type LogWriter, clé “”?

J’ai un site web asp.net. J’ai ajouté la référence de Microsoft.Practices.EnterpriseLibrary.Logging.dll au site.

dans le fichier web.cofig, j’ai défini comme ci-dessous.

     

Lorsque je lance l’exception de code qui se passe sous la place.

 defaultWriter = EnterpriseLibraryContainer.Current.GetInstance(); //Activation error occured while trying to get instance of type LogWriter, key "" 

Comment résoudre ce problème?

Votre configuration complète fait référence aux écouteurs non définis. Ceci provoque le lancement par une exécution d’une exception d’exécution de la bibliothèque d’entreprise lorsqu’il tente de résoudre ces références.

J’ai commenté les écouteurs inutilisés (et changé la catégorie par défaut en Important ) et cela fonctionne:

    

L’indice est dans l’exception interne. À la fin de InnerException.Message il est écrit:

Résolution de System.Diagnostics.TraceListener, EventLog formaté TraceListener

La configuration ci-dessus est dans app.config. Alors Program.cs contient:

 class Program { static void Main(ssortingng[] args) { LogWriter logWriter = EnterpriseLibraryContainer.Current.GetInstance(); logWriter.Write("Test"); } } 

EDIT: Sous EL 6.0, il n’y a plus de dépendance. Unity n’est plus disponible Au moment de la dernière modification (AUG 2013), Unity 3 était le produit actuel. Unité 3.0

Certains des conseils ci-dessous concernant l’éditeur App.config pour EL sont toujours utiles. Certains changements de code pour el5 à el6 sont également présentés.

Voici ma tentative de clarification. the el5.0 error L’exemple d’erreur

La résolution de la dépendance a échoué, tapez = “Microsoft.Practices.EnterpriseLibrary.Logging.LogWriter”, name = “(none)”. Une exception est survenue pendant que: pendant la résolution. L’exception est: InvalidOperationException Le type LogWriter ne peut pas être construit. Vous devez configurer le conteneur pour fournir cette valeur.

Résumé: Unity ne peut pas voir les bibliothèques ou ne peut pas trouver les entrées app.config, les entrées de configuration d’application sont incomplètes pour la bibliothèque utilisée ou certains problèmes de ciblage se posent. Faites attention à tous ces points.

Site de téléchargement d’Enterprise Library 6 Téléchargez le fichier vsix

Microsoft.Practices.EnterpriseLibrary.ConfigConsoleV6.vsix

vous l’utilisez pour éditer correctement le fichier app.config.

Utilisez toujours nuget pour installer des packages, MAIS vous avez besoin du téléchargement ci-dessus pour éditer correctement le fichier app.config.

 PM > Install-Package EnterpriseLibrary.Logging PM> Install-Package EnterpriseLibrary.Common Pm> Install-Package Unity PM> Install-Package EnterpriseLibrary.ExceptionHandling 

Il existe quelques autres bibliothèques ENT qui pourraient vous intéresser. http://nuget.org/packages?q=entlib

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Practices.EnterpriseLibrary.Common.Configuration.Unity; using Microsoft.Practices.EnterpriseLibrary.ExceptionHandling; using Microsoft.Practices.EnterpriseLibrary.Logging; using Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.Unity; using Microsoft.Practices.Unity; // << SEPARATE since EL6 , unity 3 has own install. public class abc { ///  /// Unity Container with key dependencies registered ///  public static UnityContainer UC { get; private set; } private static IUnityContainer _IUContainer;// not sure if this is needed public static LogWriter LogWtr; public static ExceptionManager ExcMgr; ///  /// Controller Bootstrap to manage as singleton via static properties and therefore ONLY 1 Unity Container ///  static bootstrap() { UC = new UnityContainer(); // one container per work process. managing and resolving dependencies // DO NO DO THIS WITH NEW VERSION OF Enterprise LIBRARY this was v5, v6 does not need this // now we tell unity about the container manager inside EntLib. // we dont want 2 containers, so we tell UNity look after EntLib as well please // UC.AddNewExtension(); //No need to add The extensions individually. //no longer required and indeed Library documents this as obselete // UC.AddNewExtension();** //================ END OF OLD V5 approach ======================== LogWtr = UC.Resolve(); ExcMgr = UC.Resolve(); // other initializations here } } 

Utilisez la console de configuration téléchargée, par exemple le VSIX. clic droit sur app.config.

Console de configuration EntLib

Le fichier APP.CONFIG doit comporter une section avec les bibliothèques ENtLibraries utilisées. Vous devez vous assurer que la configuration Web app.config du projet en cours a été créée. Les entrées sont ajoutées lorsque vous utilisez la console de la bibliothèque Enterprise pour configurer la journalisation ou la gestion des exceptions.

   

Cela a fonctionné pour moi, avec EL 6.0 et ne pas utiliser Unity

Init Logger à partir du fichier web.config, sur Global.asax -> Application_Start

 var configSource = ConfigurationSourceFactory.Create(); Logger.SetLogWriter(new LogWriterFactory(configSource).Create()); 

Utiliser l’enregistreur sur le contrôleur MVC

 Logger.Write("Hello", "General");