0
我有一個標準的基於StructureMap-的ControllerFactory設置,我有具有各自具有IRepository
類型的依賴關係不同的依賴關係,像這樣控制器:插件被實例化一次以上每HttpContext的
// "web" assembly
public StructureMapRegistry : Registry
{
public StructureMapRegistry()
{
Scan(scanner =>
{
scanner.AssemblyContainingType<WidgetController>();
scanner.AssemblyContainingType<Repository>();
scanner.WithDefaultConventions();
});
For<IRepository>().HybridHttpOrThreadLocalScoped().Use<Repository>();
}
}
public WidgetController(IService1 service1, IService2 service2, Service3 service3)
{
// etc, etc
}
// "data" assembly
public Service1 : IService1
{
public Service1(IRepository repository)
{
// etc, etc
}
}
public Service2 : IService2
{
public Service2(IRepository repository)
{
// etc, etc
}
}
public Service3
{
public Service3(IRepository repository)
{
// etc, etc
}
}
使用調試和GetHashCode()
之類的,似乎有一個新的Repository
被實例化在每個服務當WidgetController
,當我期待他們都使用相同的實例。
我誤解了HybridHttpOrThreadLocalScoped()
的功能嗎?是否因爲我有時會傳入具體類而不是接口作爲依賴關係,就像我在上面的代碼中使用Service3
(常常使用IRepository,從來不是存儲庫具體類)?我完全做錯了嗎?
(此代碼,明顯是從實際的代碼外推,所以我希望我沒有遺漏任何重要的細節。)
注:我使用StructureMap 2.6.1。