この登録は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<>ステートメントを使用して正しいインスタンスを取得します。
自分の慣習と一緒にスキャンを使用してこれを行うことができるようですが、それを行う方法を正確に理解することはできません。
これはいくつかのサンプルコードです
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を使用して自分で構築を処理するにはどうすればよいですか?