2016-05-25 20 views
1

Ich habe in die Dokumentation gelesen und kann nichts über die Auflösung eines Typs finden und gleichzeitig einige seiner Abhängigkeiten außer Kraft setzen. Am einfachsten mit einem Beispiel zu veranschaulichenBestimmte Implementierung beim Auflösen einer Abhängigkeit überschreiben

public class A 
{ 
    public A(IServiceA a, IServiceB b) {}  
} 
// Resolve scenarion 
type => 
{ 
    // type is A 
    var a = Container.Resolve<IServiceA>(); 
    a.SomeProperty = "magic"; 
    return Container.Resolve(type) // TODO: How to resolve A using a 
} 

Macht es Sinn? War auf der Suche nach so etwas wie

return Container.Resolve(type, Rule.Override.TypeOf<IServiceA>(a)); 

Great job mit DryIoc

Edit (2016.05.26) Meine Frage wurde missleading. Im Folgenden finden Sie komplette Codebeispiel (für prism)

ViewModelLocationProvider.SetDefaultViewModelFactory((view, type) => 
{ 
    var page = view as Page; 
    if (page != null) 
    {      
      var navigationService = Container.Resolve<INavigationService>(); 
      ((IPageAware)navigationService).Page = page; 
      var @override = Container.Resolve<Func<INavigationService, type>>(); // How to do this 
      return @override(navigationService); 
    } 
    return Container.Resolve(type); 
}); 

Antwort

1

Resolve als Func with parameter Sie weitergeben wollen:

var factory = Container.Resolve<Func<IServiceA, A>>(); 
var result = factory(a); 

Update:

Angesichts der Laufzeit Art zu lösen:

type => 
{ 
    // type is A 
    var a = Container.Resolve<IServiceA>(); 
    a.SomeProperty = "magic"; 

    // Asking for required service type, but wrapped in Func returning object 
    var factory = Container.Resolve<Func<IServiceA, object>>(requiredServiceType: type); 
    return factory(a); 
} 
+0

Sieht vielversprechend aus. Ich sehe, dass ich meine Frage ein wenig irreführend angegeben habe, da der Parameter 'type'' Type' ist und zur Kompilierzeit nicht bekannt ist ... Irgendwelche Gedanken? – joacar

+0

Überprüfen Sie das Update. – dadhi

+0

Sorry, habe deine Bearbeitung nicht gemacht, aber das Update sollte auch dafür funktionieren. – dadhi

Verwandte Themen