internal static void AddBindableTargets(this IServiceCollection services, Type binding) { var bindables = BindingHelpers.CollectBindables(binding); foreach (var bindable in bindables.Values) { // Add bindable defined in a binding var bindableTargetType = bindable.BindingTargetType; services.AddSingleton(bindableTargetType, (p) => { var impl = p.GetRequiredService(binding); var result = bindable.FactoryMethod.Invoke(impl, new object[0]); return(result); }); // Also register an IMessageChannel if bindableTargetType is a IMessageChannel if (bindableTargetType != typeof(IMessageChannel) && typeof(IMessageChannel).IsAssignableFrom(bindableTargetType)) { services.AddSingleton(typeof(IMessageChannel), (p) => { var impl = p.GetRequiredService(binding); var result = bindable.FactoryMethod.Invoke(impl, new object[0]); return(result); }); } } }