Dependency injection using MEF

suggest change
public interface ILogger
  {
      void Log(string message);
  }

  [Export(typeof(ILogger))]
  [ExportMetadata("Name", "Console")]  
  public class ConsoleLogger:ILogger
  {
      public void Log(string message)
      {
          Console.WriteLine(message);
      }
  }

  [Export(typeof(ILogger))]
  [ExportMetadata("Name", "File")]  
  public class FileLogger:ILogger
  {
      public void Log(string message)
      {
          //Write the message to file
      }
  }

  public class User
  {  
      private readonly ILogger logger;
      public User(ILogger logger)   
      {
          this.logger = logger;
      }
      public void LogUser(string message)
      {
          logger.Log(message)  ;
      }
  }

  public interface ILoggerMetaData
  {
      string Name { get; }
  }
  
  internal class Program
  {
      private CompositionContainer _container;
      
      [ImportMany]
      private IEnumerable<Lazy<ILogger, ILoggerMetaData>> _loggers;
      
      private static void Main()
      {            
          ComposeLoggers();
          Lazy<ILogger, ILoggerMetaData> loggerNameAndLoggerMapping = _ loggers.First((n) => ((n.Metadata.Name.ToUpper() =="Console"));
          ILogger logger= loggerNameAndLoggerMapping.Value
          var user = new User(logger);
          user.LogUser("user name");
      }
      
      private void ComposeLoggers()
      {
          //An aggregate catalog that combines multiple catalogs
          var catalog = new AggregateCatalog();
          string loggersDllDirectory =Path.Combine(Utilities.GetApplicationDirectory(), "Loggers");
          if (!Directory.Exists(loggersDllDirectory ))
          {
              Directory.CreateDirectory(loggersDllDirectory );
          }
          //Adds all the parts found in the same assembly as the PluginManager class
          catalog.Catalogs.Add(new AssemblyCatalog(typeof(Program).Assembly));
          catalog.Catalogs.Add(new DirectoryCatalog(loggersDllDirectory ));
          
          //Create the CompositionContainer with the parts in the catalog
          _container = new CompositionContainer(catalog);
          
          //Fill the imports of this object
          try
          {
              this._container.ComposeParts(this);
          }
          catch (CompositionException compositionException)
          {
              throw new CompositionException(compositionException.Message);
          }
      } 
  }

Feedback about page:

Feedback:
Optional: your email if you want me to get back to you:


Dependency Injection:
* Dependency injection using MEF

Table Of Contents
17 Regex
19 Arrays
21 Enum
22 Tuples
24 GUID
27 Looping
36 Casting
43 Dependency Injection
46 Methods
88 Events
92 Structs
104 Indexer
106 Stream
107 Timers
109 Threading
127 Caching
135 Pointers
147 C# Script