dnn*_*per 9 c# unity-container strategy-pattern
我如何获得microsoft unity来"构造"给定接口类型的类列表.
很简单的例子:
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)
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
Ste*_*han 13
If you are using Unity 2 you can use ResolveAll<T>
Container.RegisterType<IShippingInfo,FloridaShippingCalculation>("Florida");
Container.RegisterType<IShippingInfo,NewYorkShippingCalculation>("NewYork");
Container.RegisterType<IShippingInfo,AlaskaShippingCalculation>("Alaska");
IEnumerable<IShippingInfo> infos = Container.ResolveAll<IShippingInfo>();
Run Code Online (Sandbox Code Playgroud)
You have to give a name to every registration because ResolveAll will only return named registrations.
And*_*ers 11
您不需要将容器作为参数,使用如上所述的名称注册具体类型,然后在构造函数中添加数组作为参数,IList或通用枚举不起作用.
public MyConstructor(IMyType[] myTypes)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4931 次 |
| 最近记录: |