2010-02-07 73 views
2

我以前使用SM 2.5.3。我有一些代碼存儲的對象,看起來像這樣的命名實例:如何判斷命名實例是否在StructureMap 2.6的容器中?

ObjectFactory.Configure(x => 
    x.ForRequestedType<T>() 
     .TheDefault.IsThis(item) 
     .WithName(itemName)); 

然後要求從容器中的一個項目,我會做:

return ObjectFactory.GetNamedInstance<T>(key); 

如果特定的命名實例不在容器中,這會炸燬,我發現異常並返回null。這是我如何判斷容器中是否已經放入了某些東西(正在使用它來緩存小塊數據)。

但是,我昨天更新了代碼2.6,現在它總是返回任何「T」的實例,即使命名實例在容器中不存在。即使是新的TryGetInstance()方法也能做到這一點。所以我的問題是,我如何判斷命名實例是否實際上不在容器中?我注意到檢索非命名實例並不是這樣。

這是我的新的註冊代碼如下所示:

ObjectFactory.Configure(x => x.For<T>().Use(item).Named(itemName)); 

如果有人能告訴我什麼,我做錯了,或者有更好的建議這樣做,我會很感激!

+0

這聽起來像是2.6中引入的錯誤。我會研究它。你絕對不應該去查詢這個模型。 – 2010-02-08 15:54:49

回答

2

我找到了解決方案。當從容器中取出的命名實例,我現在使用的模型對象的功能檢查,如果命名實例有:

if (ObjectFactory.Model.InstancesOf<T>().Any(x => x.Name == itemName)) 
{ 
    return ObjectFactory.GetNamedInstance<T>(itemName); 
} 

return default(T); 

這也讓我擺脫try ... catch塊的那個我以前有過,這是一件好事。不過,如果有人有任何其他建議,我想聽聽他們。 謝謝!

相關問題