2013-04-06 60 views
1

在我的項目中,我有不同的程序集。獲取不同組件的上下文

SignalR集線器(和客戶端MVC4文件)位於Website項目中。

我中心是這樣的:

public class PredictHub : Hub 
{ 
    private readonly IChat _chat; 

    public PredictHub(IChat chat) 
    { 
     _chat = chat; 
    } 

    public void Chat(String message) 
    { 
     _chat.AddMessage(message); 
    } 
} 

在我的第二組件BusinessIChat.csChat.cs直播:

public class Chat : IChat 
{ 
    public void AddMessage(String message) 
    { 
     var context = GlobalHost.ConnectionManager.GetHubContext<ChatHub>(); 
    } 
} 

但由於Chat.cs是在Business裝配ChatHub指令不是因爲知道它沒有被引用。

這怎麼解決?

+0

最簡單的方法是將'Chat.cs'移動到您的'Website'項目中。 – 2013-04-06 16:18:12

+0

是的,當然:)但是我在該程序集中擁有所有業務邏輯,移動所有內容都會產生大量工作。 – YesMan85 2013-04-06 16:19:24

+1

使用類似「IChatHub」的界面即界面 - 通常是解決這類問題的方法。有一個擁有'界面'的基礎庫 - 你可以從兩個地方引用 - 你可以擁有一切。你只需要在你的網站上實現這個接口(甚至更好的是其他的lib)。 – NSGaga 2013-04-06 19:24:28

回答

2

當SignalR和Chat類處於相同的過程中時,您只能獲取上下文。

+0

基本上,這是唯一正確的答案。我很討厭使用討厭的代理等等,但最簡單的解決方案不是將業務邏輯轉移到集線器,而是將業務邏輯轉移到集線器。我將所有集線器從'網站'裝配體移出到'商業'裝配體。 – YesMan85 2013-04-07 10:35:17