0
我有這個登記StructureMap使用ConstructedBy連同非通用對於
ObjectFactory.Initialize(x => {
x.For<IPageModel>().UseSpecial(y => y.ConstructedBy(r => ((MvcHandler) HttpContext.Current.Handler).RequestContext.RouteData.GetCurrentModel<IPageModel>()));
});
然後我訪問這個對象在我的構造這樣
public HomeController(IPageModel model) {}
現在我想對所有登記實現了IPageModel接口的具體類型,並且在詢問時我想使用相同的語句來獲取正確的實例。
看來我可以使用掃描與我自己的約定一起做到這一點,但我無法弄清楚如何做到這一點。
這是一些示例代碼
x.Scan(scanner =>
{
scanner.AssembliesFromApplicationBaseDirectory();
scanner.Convention<MySpecialConvetion>();
});
public class MySpecialConvetion : IRegistrationConvention {
public void Process(Type type, Registry registry) {
if(type.IsAssignableFrom(typeof(IPageModel))) {
registry.For<CONCRETE IMPLEMENTATION>().UseSpecial(y => y.ConstructedBy(r => ((MvcHandler) HttpContext.Current.Handler).RequestContext.RouteData.GetCurrentModel<CONCRETE IMPLEMENTATION>()));
}
}
}
編輯:好像我需要使用非通用對,但我怎麼能處理好建設我自己使用非通用呢?
非常感謝您的幫助! – Marcus