基于接口隔离原则的依赖注入实现

接口隔离原则

不强迫接口的使用者依赖其不需要的接口

接口隔离原则的一般实现

    public interface IFoo
    {
        void DoSomeOperation();
    }

    public interface IBar
    {
        void DoAnotherOperation();
    }

    public class Qux : IFoo, IBar
    {
        public Qux()
        {
            Console.WriteLine("Qux instanced");
        }

        public void DoAnotherOperation()
        {
            Console.WriteLine("I am IBar");
        }

        public void DoSomeOperation()
        {
            Console.WriteLine("Just IFoo");
        }
    }

ASP.NET Core 依赖注入方式注入接口的实现类

为了使IFoo和IBar接口使用同一个Qux实例,可以使用以下方式注入所需服务

        static void Main(string[] args)
        {
            var root = new ServiceCollection()
                .AddScoped<Qux>()
                .AddScoped<IFoo>(provider=>provider.GetService<Qux>())
                .AddScoped<IBar>(provider => provider.GetService<Qux>())
                .BuildServiceProvider();

            using (var scope = root.CreateScope())
            {
                var provider = scope.ServiceProvider;
                provider.GetRequiredService<IFoo>();
                provider.GetRequiredService<IBar>();
            }

            Console.ReadLine();
        }

运行效果如下

posted @ 2020-07-21 23:27  青玄鸟  阅读(160)  评论(0编辑  收藏  举报