У меня есть эта регистрация в 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, и когда меня попросят, я хочу использовать тот же оператор 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>()));
}
}
}
Edit: Похоже, мне нужно использовать нетипичный для, но как я могу справиться строительство моей уверенности, используя необщий Для?
Большое спасибо за помощь! – Marcus