2011-04-12 166 views
1

我爲我的DomainService類寫了一個重載。問題是,當我重新編譯時,它沒有顯示爲我的DomainContext的重載。怎麼了?下面是一個代碼示例:爲什麼DomainService構造函數重載顯示爲DomainContext構造函數重載?

[EnableClientAccess] 
public class FoodDomainService : LinqToEntitiesDomainService<FoodEntities> 
{ 
    public FoodDomainService(CultureInfo cultureInfo) 
    { 
     Thread.CurrentThread.CurrentCulture = cultureInfo; 
    } 
} 

而且這不起作用:

FoodDomainContext _foodContext = new FoodDomainContext(Thread.CurrentThread.CurrentCulture); 

我得到一個錯誤,沒有超載匹配。我不允許這樣做嗎?我需要某種屬性嗎?

回答

0

這將無法正常工作,因爲在Silverlight的客戶端代碼上生成了DomainContext,單擊查看所有文件夾或跳轉到定義,您將看到生成的代碼將不包含您的額外構造函數。

相反,您將不得不在您的域服務中創建一個方法並將信息傳遞給服務器。

public SetCultreInfo(int lang,...) 
{ 
    .. set culture info 
} 

在您的客戶端,裏面的構造應該叫,

public MyDomainContext() 
{ 
    this.SetCulture(....); 
} 
1

你不允許這樣做。當您從Silverlight客戶端新建上下文時,您並不是直接對您的服務進行類型化。而是實例化由RIA Services生成的代理類,然後該代理類將調用您的服務。這就是爲什麼你看不到你的構造函數:因爲RIA沒有在你的代理中生成它。

做你想做的事情也會暗示有一個往返於服務器的時間點,這是不會發生的,因爲你需要完成初始化該對象纔可以這樣做。

無論如何,您可以創建一個名爲SetCurrentCulture()的方法,然後在之後調用來初始化代理。

+0

我給出的兩個建議基本上是一樣的。但是,他們都不工作。我在我的DomainContext類中由於某種原因而無法訪問我的DomainService類中的公共方法。我看不到任何可查看方法的屬性(例如查詢方法)。那麼我錯過了什麼?我是否把這個方法放在錯誤的地方?我把它放在XXXDomainService類中,作爲一個公共方法,沒有任何屬性。 – vbullinger 2011-04-12 15:43:28

+0

您的方法必須將實體作爲輸入/輸出自動可見。嘗試添加'[Invoke]'屬性,並將文化傳遞爲'string',然後可以用'CultureInfo.CreateSpecificCulture'解析(儘管我認爲它應該通過傳遞一個'CultureInfo'來工作) – 2011-04-12 22:58:22