Если я правильно интерпретирую вашу конфигурацию Ninject - общее решение в карте структуры будет:
For<Roster>().HttpContextScoped().Use<Roster>()
.Ctor<ICalendar>().Is<MonthCalendar>();
Edit:
Чтобы сделать то же самое с полностью динамическими регистрациями, вместо этого вы должны использовать это:
For(binding.Source).LifecycleIs(binding.Lifecycle)
.Use(binding.Destination).Child(binding.ChildSource)
.IsConcreteType(binding.ChildDestination);
Для динамической настройки регистрации типа вы можете использовать соглашение:
public class DynamicConvention : IRegistrationConvention
{
public void Process(Type type, Registry registry)
{
TypeRegistrationSettings typeSettings = FindTypeSettings(type);
if (typeSettings == null)
return;
registry.For(typeSettings.Source)
.LifecycleIs(typeSettings.Lifecycle).Use(typeSettings.Destination);
}
}
Где FindTypeSettings (type) будет искать ваши собственные привязки.
Соглашение зарегистрировано при сканировании:
ObjectFactory.Initialize(
c =>
c.Scan(s => {
s.TheCallingAssembly();
s.Convention<DynamicConvention>();
})
);