2012-02-06 2 views
1

표시된대로 here으로 구성 요소/서비스를 등록하고 있으며 아래에 표시된 클래스도 구현 중입니다. 내가 Reload를 호출했을 때, 등록되지 않았고 그 사실을 알았습니다. 어떤 아이디어?Autofac이 등록 된 유형을 확인하지 못합니다.

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 
    } 
} 

답변

0

당신이 사용 AppDomain.CurrentDomain.GetAssemblies()에 링크 대답은 현재로드 된 어셈블리를 얻을, 한 다음에 PluginBase에서 파생 된 유형을 등록합니다.

그러나 어셈블리는 처음 필요할 때만 AppDomain으로로드됩니다. 등록 할 때 아직로드되지 않은 어셈블리 에 관심있는 유형이있을 것입니다.AppDomain.CurrentDomain.GetAssemblies()의 결과를보고이를 확인할 수 있습니다 : 거기에있는 어셈블리가 누락 되었습니까?

가장 쉬운 방법은 AutoFac MEF integration과 MEF의 DirectoryCatalog를 사용하는 것입니다. DirectoryCatalog는이 시나리오에 맞게 설계되었습니다.

편집 : 두 번째로 보았을 때 문제는 PluginBase으로 등록했지만 일부 하위 유형으로 해결하려고하는 것입니다. 여기서 달성하고자하는 일에 대해 .As<PluginBase>() 대신 .AsSelf()을 등록해야 할 수 있습니다.

+0

누락 된 것이 없습니다. 나는 그들이 pluginbase를 해결할 수있는 pluginbase를 상속받은 클래스를 등록했다는 것을 안다. 그리고 그것은 다양한 인스턴스를 준다. – Jon

+0

나는 같은 등록을 유지했지만 AsSelf를 추가했는데 성공한 것으로 보인다! 그래서 그것으로있다 () .AsSelf() – Jon

+0

그게 무슨 뜻인지 모르겠지만! – Jon

관련 문제