c# - Unity 解析多个类

标签 c# unity-container strategy-pattern

如何让 Microsoft Unity 为给定的接口(interface)类型“构建”类列表。

非常简单的例子:

  List<IShippingCalculation> list = new List<IShippingCalculation>();
  list.Add(new NewYorkShippingCalculation());
  list.Add(new FloridaShippingCalculation());
  list.Add(new AlaskShippingCalculation());

  //Not What I want
  public void calcship(List<IShippingCalculation> list)
  {
    var info = new ShippingInfo(list);
    info.CalculateShippingAmount(State.Alaska)
  }

  //Somehow in unity, must i do this for all the concrete classes? 
  //how does it know to give a list.
  Container.RegisterType<IShippingInfo,new AlaskaShippingCalculation()>();??

  //What I want
  public void calcship(IShippingInfo info)
  {
    info.CalculateShippingAmount(State.Alaska)
  }

谢谢!

最佳答案

如果您使用的是 Unity 2,则可以使用 ResolveAll<T>

Container.RegisterType<IShippingInfo,FloridaShippingCalculation>("Florida");
Container.RegisterType<IShippingInfo,NewYorkShippingCalculation>("NewYork");
Container.RegisterType<IShippingInfo,AlaskaShippingCalculation>("Alaska");

IEnumerable<IShippingInfo> infos = Container.ResolveAll<IShippingInfo>();

您必须为每个注册命名,因为 ResolveAll 将只返回命名注册。

关于c# - Unity 解析多个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4206958/

相关文章:

java - 继承与策略模式

c# - CancellationTokenSource.CancelAfter 不工作

c# - 比较两个字典并返回另一个字典中的差异

c# - Prism 7 - 将 ConfigurationModuleCatalog 与 DirectoryModuleCatalog 合并

c# - 尝试将类型注册到 IoC 容器时,HttpContext.Current 为空

c# - 一个简单的策略模式示例的问题

c# - 绑定(bind)集合的子集

c# - 单元测试 NotifyPropertyChanged()

.net - Unity IOC 静态工厂

java策略不同的论点