示例#1
0
        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);
                    });
                }
            }
        }