Autofac не разрешает зарегистрированные типы - PullRequest
1 голос
/ 06 февраля 2012

Я регистрирую свои компоненты / сервисы, как показано здесь , и я также реализую класс, как показано ниже.Когда я звоню Перезагрузить, его высказывание не зарегистрировано, и я знаю, что это так.Есть идеи?

public interface ITypeReloader 
{ 
    PluginBase Reload(Type type); 
} 

public class TypeReloader 
{ 
    IComponentContext _container; 
    public TypeReloader(IComponentContext container) 
    { 
        _container = container; 
    } 

    public PluginBase Reload(Type type) 
    { 
        (PluginBase)_container.Resolve(type);  //Not registered error
    } 
}

1 Ответ

1 голос
/ 07 февраля 2012

Ответ, на который вы ссылаетесь, использует AppDomain.CurrentDomain.GetAssemblies() для получения загруженных в данный момент сборок, а затем регистрирует в них любые типы, производные от PluginBase.

Однако сборки загружаются в домен приложений только при первой необходимости. Бьюсь об заклад, типы, которые вас интересуют, находятся в сборках , которые еще не были загружены при регистрации. Вы можете проверить это, посмотрев результат AppDomain.CurrentDomain.GetAssemblies(): отсутствуют ли какие-либо сборки, которые вы ожидали быть там?

Самый простой способ исправить это - использовать AutoFac MEF для интеграции и MEF DirectoryCatalog. Каталог каталогов предназначен именно для этого сценария.

edit : при втором взгляде проблема в том, что вы регистрируетесь как PluginBase, но затем пытаетесь разрешить как некоторый подтип. Для того, чего вы здесь пытаетесь достичь, вам, вероятно, нужно зарегистрировать .AsSelf() вместо .As<PluginBase>().

...