C#学习教程:在Unity中有条件地解决NamedImplementations//注册container.Register("One");container.Register("二");//解析vartwoFish=container.Resolve("Two");现在假设我有一个依赖于IFish并实现ITank的类:这不起作用:container.Register();vartank=container.Resolve("一个");这有效:varfish=container.Resolve("One");vartank=container.Resolve(newDependencyOverride(typeof(IFish),fish);但它只处理简单的情况(例如在这个例子中),而不是可能有很多名为“One”的实现的一般情况。我想要什么是为了能够告诉Unity:“当resolvingthename实现时为使用“One”,如果没有这样的实现,register会回退到未命名的实现”是否有自定义解析器可以插入Unity有这种行为吗?您可以使用Unity的InjectionFactory注入命名实例.varcontainer=newUnityContainer();//registercontainer.Register("One");container.Register("Two");container.RegisterType(newInjectionFactory(c=>c.Resolve("One")));如果你现在解析一个Tank类型的实例,你的Tank将被注入一个OneFish实例。要处理要注入IFish的默认实现的情况,您可以将InjectionFactory更改为以下C#学习教程就是这样:在Unity中有条件地寻址命名实现我所分享的只是如果它对每个人都有用并且需要了解更多C#学习教程,希望大家多多关注—newInjectionFactory(c=>{if(c.IsRegistered("One")){c.Resolve("One");}else{c.Resolve(《二》);}})本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
