2017-08-16 15 views
0

を登録されていない...のStructureMapレジストリ:いいえ、デフォルトのインスタンスはのStructureMapを使用して

私はそうのように私のContainerRegistryを画定私は、ビジネス層内のアセンブリの一連の&単一のIoCエントリ・ポイントを持っています。

BUSINESS.DLLレジストリ:それ自身のライブラリで
WorkflowProviderクラスの生活。そのため、私はBUSINESS LAYERSアセンブリをWorkflowProviderに渡しているので、BUSINESS LAYER内の特定の(期待される)クラスを動的に「見つける」ことができます。

// I have simplified this class for the question 
public ContainerRegistry() 
{ 
    Scan(
     scan => 
     { 
      scan.TheCallingAssembly(); 
      scan.WithDefaultConventions(); 
      scan.LookForRegistries(); 
      scan.AssembliesFromApplicationBaseDirectory(f => f.FullName.StartsWith("My.Awesome.Application", true, null)); 
      scan.AddAllTypesOf(typeof(IWorkflowProvider)); 
      scan.SingleImplementationsOfInterface(); 
     }); 

    For<IWorkflowProvider>().Use<WorkflowProvider>() 
     .Ctor<Assembly>().Is(Assembly.GetExecutingAssembly()); 
} 

例外は: - BUSINESS &ワークフローアセンブリを含む
は今、私はすべてのアセンブリのユニットテストのセットを書きたいです。私はWorkflowProviderのインスタンスを作成しようとすると、しかし、私は次の例外を取得しています:

var container = IoC.Initialize(); 
var workflowProvider = container.GetInstance<WorkflowProvider>() 

んが、デフォルトのインスタンスが登録されていないと自動的に タイプのために決定することができない「System.Reflection.Assembly」さらに
、私は潜水艦に私がしたいユニットテストプロジェクトからビジネスレイヤContainerRegistryを使用します。

GOALマッピングのこの部分にunittestのアセンブリをtitute:

For<IWorkflowProvider>().Use<WorkflowProvider>()<br/> 
    .Ctor<Assembly>().Is(Assembly.GetExecutingAssembly()); 

質問:ユニットテストプロジェクトはまた、自身のレジストリを

  • が必要ですか?
  • もしそうなら、どのように見えますか?
  • もしそうなら、どのように1つのプロジェクトで2つのレジストリを消費しますか?
  • GetExecutingAssembly部分をどのように置き換えるのですか?
  • ここで正しいアプローチは何ですか?

この権利を説明したいと思います。

ありがとうございました

答えて

0

これは私が見つけた唯一の解決策です。他の誰かがより良い解決策を思いつくことを願っています。

var args = new ExplicitArguments(); 
args.Set<Assembly>(Assembly.GetExecutingAssembly()); 

var container = IoC.Initialize(); 
var workflowProvider = container.GetInstance<WorkflowProvider>(args); 
関連する問題