gpt4 book ai didi

c# - IoC - 单一接口(interface)的多种实现支持

转载 作者:可可西里 更新时间:2023-11-01 02:59:08 25 4
gpt4 key购买 nike

我想知道为什么 .Net IoC 容器不容易支持单个接口(interface)的多种实现!可能是我错了,但据我所知,像 Ninject 这样的框架使用注释 ( how? ) 部分支持此功能。我认为 Windsor 或简单注入(inject)器等其他框架没有支持这种情况的简单机制。

为什么很多框架不支持这有什么原因吗? AFAIK,使用接口(interface)的最重要原因之一是实现松散耦合。如果旨在改善松散耦合的框架不能流畅地支持单个接口(interface)的多个实现,我不明白为什么!

附言当然我理解在运行时会有解析的问题,容器会纠结选择哪个实现,但这是设计中必须要考虑的事情,对吧?

最佳答案

Unity具有相同的功能

注册命名依赖

    var container = new UnityContainer();
container.RegisterType<IConnector, Connector>("TestConnector");

按名称解析

    container.Resolve<IConnector>("TestConnector");

同样的做法

    [Dependency("TestConnector")]
public IConnector Connector { get; set; }

温莎也一样

class Program
{
static void Main(string[] args)
{
var container = new WindsorContainer()
.Register(Component.For<IConnector>().ImplementedBy<ConnectorA>().Named("ConnectorA"))
.Register(Component.For<IConnector>().ImplementedBy<ConnectorB>().Named("ConnectorB"));

var connectorA = container.Resolve<IConnector>("ConnectorA");
Console.WriteLine("Connector type: {0}", connectorA.GetType());
var connectorB = container.Resolve<IConnector>("ConnectorB");
Console.WriteLine("Connector type: {0}", connectorB.GetType());
Console.ReadKey();
}
}

public interface IConnector
{
}

public class ConnectorA : IConnector
{

}

public class ConnectorB : IConnector
{

}

关于c# - IoC - 单一接口(interface)的多种实现支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11708329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com