2017-08-16 104 views
0

使用StructureMap ...StructureMap登記處單元測試項目:無默認實例註冊

我有一系列組件&的業務層中的單個IoC的入門點,其中我定義我ContainerRegistry像這樣:

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()); 
} 

除外:
現在,我想要寫的所有組件一套單元測試 - 包括業務工作流&組件。然而,當我嘗試創建WorkflowProvider的實例我得到以下異常:

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

沒有默認實例註冊,不能自動 類型確定「System.Reflection.Assembly」

目標:
此外,當我使用的業務層ContainerRegistry從單元測試項目,我想潛艇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); 
相關問題