2010-06-22 80 views
4

有沒有人知道如何解決這個問題Unity Container InjectionConstructor沒有任何超載的Func <string>?Unity Container InjectionConstructor - 不能將lambda表達式轉換爲類型'object []',因爲它不是委託類型

this.unityContainer 
    .RegisterType<IService1Client, Service1Client>() 
    .Configure<InjectedMembers>() 
    .ConfigureInjectionFor<Service1Client>(
    new InjectionConstructor(() => 
     this.unityContainer.Resolve<User>() 
     .SelectedDepartment 
     .ApplicationServerUrl 
     .ToString())); 

乾杯,

回答

3

想我找到了自己的答案:

Func<string> GetApplicationServerUrl =() => { 
    return this.unityContainer.Resolve<User>() 
    .SelectedDepartment 
    .ApplicationServerUrl 
    .ToString(); 
}; 

this.unityContainer.RegisterType<IService1Client, Service1Client>() 
    .Configure<InjectedMembers>() 
    .ConfigureInjectionFor<Service1Client>(
    new InjectionConstructor(GetApplicationServerUrl())); 
5

你可以使用InjectionFactory。

this.unityContainer.RegisterType<IService1Client>(
    new InjectionFactory((ctr, type, name) => 
    { 
    User user = this.unityContainer.Resolve<User>(); 
    string url = user.SelectedDepartment.ApplicationServerUrl.ToString(); 
    return new Service1Client(url); 
    })); 
相關問題