在C#語言中,使用StructureMap 2.5.4,目標是.NET Framework 3.5庫。爲什麼在兩個相同的安裝結構映射代碼路徑中獲取202
我已採取措施在結構映射DI設置中支持多個配置文件,並使用帶啓動引導程序的ServiceLocator模型。第一次設置是使用掃描儀加載默認註冊表。
現在我想確定運行時我喜歡使用哪種註冊表配置。使用註冊表掃描和加載多個程序集。
似乎它不適用於實際的實現(獲取202,默認實例找不到),但剝離的測試版本確實工作。以下設置。含註冊機構
- 兩個組件和實現
- 在運行應用程序域,提供共享接口,並請求創建實例,使用在構造函數中的接口(其中獲得處理感謝名單上Invokation輪廓)掃描他們
下面工作的代碼示例(相同的結構,其他的設置,但更復雜的東西,那得是一個202):
爲202什麼類型couses是可能的,特別是命名SY stem.Uri類型,不是由默認類型的句柄?? (URI是沒有意義的)上的配置文件我用
// let structure map create instance of class tester, that provides the registered
// interfaces in the registries to the constructor of tester.
public class Tester<TPOCO>
{
private ITestMe<TPOCO> _tester;
public Tester(ITestMe<TPOCO> some)
{
_tester = some;
}
public string Exec()
{
return _tester.Execute();
}
}
public static class Main {
public void ExecuteDIFunction() {
ObjectFactory.GetInstance<Tester<string>>().Exec();
}
}
public class ImplementedTestMe<TSome> : ITestMe<TSome>
{
public string Execute()
{
return "Special Execution";
}
}
public class RegistryForSpecial : Registry
{
public RegistryForSpecial()
{
CreateProfile("Special",
gc =>
{
gc.For(typeof(ITestMe<>)).UseConcreteType(typeof(ImplementedTestMe<>));
});
}
}
背景文章。
- http://devlicio.us/blogs/derik_whittaker/archive/2009/01/07/setting-up-profiles-in-structuremap-2-5.aspx
- http://structuremap.sourceforge.net/RegistryDSL.htm
編輯: 似乎缺少的接口實際上是一個被確定的運行時間。所以這裏是下一個challange(並解決):
無論何時StructureMap需要創建對象,我提供了一個默認對象。像:
x.ForRequestedType<IConnectionContext>()
.TheDefault.Is.Object(new WebServiceConnection());
這樣我擺脫了202錯誤,因爲現在可以使用一個真實的實例,無論結構圖需要的類型。
接下來是運行時覆蓋。這在第一次使用ObjectFactory.Configure方法時並不奏效。相反,我使用ObjectFactory.Inject方法來覆蓋默認實例。奇蹟般有效。
ObjectFactory.Inject(typeof(IConnectionContext), context);
熱愛社區事業。
似乎是缺少一個接口傳遞給頂級接口之一。默認持有Uri屬性類型。 Thanx讓我回到正軌! – Hans 2010-01-04 06:29:51