我試圖讓signalR hub作爲使用MEF的插件的一部分。但是,在調用ImportMany對象列表後,然後在Global.asax文件的Application_Start()方法中添加目錄/容器/ ComposeParts部分後,我得到的全部是:使用MEF加載插件後映射SignalR Hub
未捕獲的TypeError:無法讀取屬性'server '未定義。
如果問題來自我的界面,插件,global.asax文件或javascript,我不知道。
接口:
public interface IPlugin
{
}
插件:
[Export(typeof(IPlugin))]
[HubName("testHub")]
public class TestHub : Hub, IPlugin
{
public string Message()
{
return "Hello World!";
}
}
在Global.asax文件
:
[ImportMany(typeof (IPlugin))]
private IEnumerable<IPlugin> _plugins { get; set; }
protected void Application_Start()
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new DirectoryCatalog(@"./Plugins"));
var container = new CompositionContainer(catalog);
container.ComposeParts(this);
RouteTable.Routes.MapHubs();
//log4net
log4net.Config.XmlConfigurator.Configure();
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
最後的JavaScript:
$(document).ready(function() {
$.connection.hub.url = 'http://127.0.0.1/signalr/';
var proxy = $.connection.testHub;
$.connection.hub.start({ transport: ['webSockets', 'serverSentEvents', 'longPolling'] })
.done(function() {
proxy.invoke('Message').done(function(res) {
alert(res);
});
})
.fail(function() { alert("Could not Connect!"); });
});
我發現的唯一信息是this post,但我無法使其工作。當我手動添加參考時,一切工作正常,但是當我在加載插件後查看「signalr/hubs」時,則沒有提及我的集線器方法。
非常感謝您的幫助。
我不確定你在做什麼是有道理的。你無法用Hub實例做任何事情。你不擁有它們的創建,並且你不能從服務器調用它們,所以我沒有把它們作爲MEF輸出的重點。 你在找DI嗎? – davidfowl 2013-04-22 09:45:55
假設你有Hub1的Project1和Hub2的project2。當你添加引用Project1和Project2從說你的主MVC項目,然後調用RouteTable.Routes.MapHubs();在global.asax中,你可以在你的javascript中調用hub1和hub 2的所有方法。我試圖找到以編程方式執行該操作的最佳方式,即動態加載包括集線器在內的dll到我的主應用程序中。 – lool 2013-04-22 11:19:04
我很新的插件框架/ DI,所以毫無疑問,我可能會困惑自己 – lool 2013-04-22 11:28:40