2013-08-21 78 views
0

由於歷史原因,我們的應用程序有一個靜態結構映射圖,可用於所有IoC/DI。我們有很多測試來檢查這個容器是否設置正確,但是要確保測試不會相互干擾變得越來越困難。我想開始分解到幾個(非靜態)容器來緩解這一點。爲了保持向後兼容性,此容器中配置的東西必須在主容器中仍可用。轉發解析爲另一個容器

我實現了一個驗證的概念,它處理只有少數基本類型這樣的系統中的一小部分:

_pocContainer = new Container(/* setup code */); 
MainContainer.Configure(c => c.For<C>.Use(ctx => _pocContainer.GetInstance<C>()); 

這個工作,並從靜態請求的C實例時容器,它從_pocContainer解決。但是,我相當肯定這不是在設計StructureMap時被認爲是正常用例的東西。這會造成糟糕的表現,還是會產生其他負面影響?有沒有更好的方法來做到這一點?

+0

你不能分割登記到註冊管理機構和分別測試每個註冊表? – PHeiberg

+0

@PHeiberg:好主意!以這種方式實現它 - 請作爲回答發佈:) – carlpett

回答

1

一種可能的方法是將註冊分爲Registries並單獨測試每個註冊表。

public class FooRegistry : Registry { 
    public FooRegistry() { 
     For<IFoo>().Use<Foo>(); 
    } 
} 

然後,您可以明確地使用註冊表測試

var container = new Container(new FooRegistry()); 

但在你的作文根自動掃描所有註冊表

var container = new Container(x => { 
    x.Scan(scanner => 
    { 
     scanner.TheCallingAssembly() 
     scanner.LookForRegistries(); 
    }); 
}); 
相關問題