2016-05-25 44 views
1

我已閱讀文檔,找不到任何有關解析類型的信息,同時覆蓋其某些依賴關係。舉例說明最簡單解決依賴時覆蓋某些實現

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 
} 

它有道理嗎?一直在尋找類似

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

與DryIoc

編輯(2016年5月26日) 我的問題是missleading偉大的工作。下面是

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); 
}); 

回答

1

決心,Func with parameter要通過完整的代碼示例(爲prism):

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

更新:

由於運行時類型來解決:

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

看起來不錯。我看到我說我的問題有點missleading因爲參數'type'是'類型',並不知道在編譯時...任何想法? – joacar

+0

檢查更新。 – dadhi

+0

對不起,沒有你的編輯,但更新也應該爲它工作。 – dadhi