2015-03-19 3 views
1

У меня есть то, что казалось прямым экспортом MEF.Перехватчики MEF и EF

[Export(typeof(IDbCommandInterceptor))] 
[PartCreationPolicy(CreationPolicy.NonShared)] 
public class LoggingCommandInterceptor : IDbCommandInterceptor 
{ 
    [Import] 
    private ILogging _ILogger;   

    public void NonQueryExecuting(
    DbCommand command, DbCommandInterceptionContext<int> interceptionContext) 
    { 
     Log(command, interceptionContext); 
    } 

    private void Log<TResult>(
    DbCommand command, DbCommandInterceptionContext<TResult> interceptionContext) 
    { 
     if (!interceptionContext.IsAsync) 
     { 
      _ILogger.LogWarn("Non-async command used: {0}", command.CommandText); 
     } 
     else 
      _ILogger.LogTrace("command used: {0}", command.CommandText); 
    } 
    ect..... 

Затем провод до

public class EFConfiguration : DbConfiguration 
{ 

    public EFConfiguration() 
    { 
     AddInterceptor(new LoggingCommandInterceptor()); 
    } 

} 

Так что вопрос является импорт [Ilogging] в LoggingCommandInterceptor всегда NULL его никогда не заполнены, когда я просматриваю состав containter я вижу экспорт зарегистрирован правильно, так что я Я потерял, почему мой Импорт не удовлетворен.

+0

Если вы вручную создаете экземпляр класса LoggingCommandInterceptor, то у MEF никогда не будет возможности удовлетворить любые импортные ... вы должны разрешить MEF создавать экземпляры любых классов, которые вы хотите удовлетворить. – BenjaminPaul

+0

@BenjaminPaul, спустившись по этой дороге, меняю EFConfiguration на этот [Import] IDbCommandInterceptor _mefInterceptor; public EFConfiguration() { AddInterceptor (_mefInterceptor); } Еще не повезло – Nrm101

ответ

0

атаковать этот другой путь, я использовал следующие после MEF Контейнер установки

[Import] 
    private IDbCommandInterceptor _LoggingCommandInterceptor; 
public MefConfig() 
    {   
    // MEF SETUP ... /// 
System.Data.Entity.Infrastructure.Interception.DbInterception.Add(_LoggingCommandInterceptor); 

    } 

Который работает, как ожидалось.