接口隔离原则
不强迫接口的使用者依赖其不需要的接口
接口隔离原则的一般实现
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();
}