我在 StructureMap 中有这个注册
ObjectFactory.Initialize(x => {
x.For<IPageModel>().UseSpecial(y => y.ConstructedBy( r => ((MvcHandler) HttpContext.Current.Handler).RequestContext.RouteData.GetCurrentModel<IPageModel>()));
});
然后我像这样在构造函数中访问这个对象
public HomeController(IPageModel model) {}
现在我想注册实现接口 IPageModel 的所有具体类型,当被要求时,我想使用相同的 For<> 语句来获取正确的实例。
似乎我可以将 Scan 与我自己的约定一起使用来做到这一点,但我不知道该怎么做。
这是一些示例代码
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>()));
}
}
}
编辑:似乎我需要使用非泛型 For,但是如何使用非泛型 For 处理我自己的构造?