2012-02-06 14 views
1

私は図のようにコンポーネント/サービスを登録していますhereと私はまた以下のようにクラスを実装しています。 Reloadを呼び出すと、登録されていないと言って、私はそれがわかっています。何か案は?登録されたタイプを解決しないオートファック

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

これはありません。私はプラグインベースを解決するプラグインベースを継承するクラスを登録していることを知っています。それは私に様々なインスタンスを与えます。 – Jon

+0

私は登録を同じままにしていましたが、AsSelfを追加しました。だからAs ().AsSelf() – Jon

+0

それは何を意味するかわからない! – Jon

関連する問題