在使用AutoFac或Unity容器进行依赖注入时,如果有多个实现类实现了同一个接口,可以使用以下方法进行解决。
public interface IService
{
void DoSomething();
}
public class ServiceA : IService
{
public void DoSomething()
{
Console.WriteLine("Service A is doing something.");
}
}
public class ServiceB : IService
{
public void DoSomething()
{
Console.WriteLine("Service B is doing something.");
}
}
public class MyComponent
{
private readonly IService _service;
public MyComponent(IService service)
{
_service = service;
}
public void DoWork()
{
_service.DoSomething();
}
}
// AutoFac配置
var builder = new ContainerBuilder();
builder.RegisterType().As();
builder.RegisterType();
var container = builder.Build();
var component = container.Resolve();
component.DoWork();
// Unity配置
var container = new UnityContainer();
container.RegisterType();
container.RegisterType();
var component = container.Resolve();
component.DoWork();
public interface IService
{
void DoSomething();
}
public class ServiceA : IService
{
public void DoSomething()
{
Console.WriteLine("Service A is doing something.");
}
}
public class ServiceB : IService
{
public void DoSomething()
{
Console.WriteLine("Service B is doing something.");
}
}
public class MyComponent
{
[Dependency]
public IService Service { get; set; }
public void DoWork()
{
Service.DoSomething();
}
}
// AutoFac配置
var builder = new ContainerBuilder();
builder.RegisterType().As();
builder.RegisterType();
var container = builder.Build();
var component = container.Resolve();
component.DoWork();
// Unity配置
var container = new UnityContainer();
container.RegisterType();
container.RegisterType();
var component = container.Resolve();
component.DoWork();
无论是构造函数注入还是属性注入,都可以通过容器的配置来指定具体的实现类,并由容器自动解析和注入相应的实例。