2011-10-17 36 views
2

我有兩個服務IServiceA和IServiceB。 IServiceB的具體實現如下所示:Unity RegisterType爲一個構造函數,它自己接受服務

public class ServiceB : IServiceB { 
    public ServiceB(string path, IServiceA serviceA) { ... } 
} 

所以我需要傳遞一個字符串和一個ServiceA。

我有點卡住我會怎麼做。我現在有這個權利:

var path = _config.Path; 
container.RegisterType<IServiceA, ServiceA>(); 
container.RegisterType<IServiceB, ServiceB>(
      new InjectionConstructor(path, container.Resolve<IServiceA>()); 

這顯然是錯誤的,因爲我實際實例化一個ServiceA,並與所有ServiceB的註冊一個實例。

我該如何告訴Unity始終解決「新鮮」的ServiceA?我嘗試從RegisterType中刪除IServiceA,並且拋出異常告訴我沒有ctor(string),這是正確的,因爲它是ctor(string,IServiceA)

回答

2

它不是特別有據可查,但這似乎工作:

container.RegisterType<IServiceA, ServiceA>(); 
container.RegisterType<IServiceB, ServiceB>(
     new InjectionConstructor(path, new ResolvedParameter<IServiceA>())); 

我會建議在生產中使用它之前,測試它。

1

我相信你也可以這樣做:

container.RegisterType<IServiceA, ServiceA>(); 
container.RegisterType<IServiceB, ServiceB>(
     new InjectionConstructor(path, typeof(IServiceA))); 
相關問題