我有以下的StructureMap註冊工作在版本2.6.4,我終於升級到最新的SM(本文撰寫時爲3.1.2)。並且需要更新它,因爲不再有IContext.BuildStack。StructureMap 3獲取請求的類型
這裏是舊的工作版本2.6.4:
initialization.For(typeof(IRepository<,>))
.Use(context =>
{
var genericArgs = context.BuildStack.Current.RequestedType.GetGenericArguments();
return RepositoryFactory.GetInstance(genericArgs[0], genericArgs[1], repositoryName);
}
);
所以我想它更改爲這會工作:
initialization.For(typeof (IRepository<,>))
.Use("IRepository<,>", context =>
{
var genericArgs = context.ParentType.GetGenericArguments();
return RepositoryFactory.GetInstance(genericArgs[0], genericArgs[1],
repositoryName);
}
);
但context.ParentType爲空。當我看context.RootType時,它被設置爲System.Object,這顯然不是我想要的。
我的測試代碼來獲得這個倉庫的一個實例是:
var userRepository = ObjectFactory.GetInstance<IRepository<User, Guid>>();
我看不出有此信息的任何其他財產,但我猜,我失去了一些東西。
感謝您指出。 該解決方法如何解決不起作用?看起來好像我創建了一個自定義實例並實現了CloseType重寫,那麼我就可以訪問那裏的泛型類型,並可以使用適當的類型調用我的RepositoryFactory。我不知道要從CloseType返回什麼,因爲它期望的是實例而不是對象。 – 2014-10-06 19:24:24
你說得對。我採取了更好的看法,解決方法確實奏效。我已經更新了答案。 – 2014-10-06 21:05:21
太棒了。今晚我會給你一個鏡頭,並確保它能正常工作。我沒有意識到新的ObjectInstance()語法,並且被卡住了。謝謝! – 2014-10-07 01:47:01