[英]What would the Autofac equivalent to this Ninject code be?
在下一頁: http : //www.asp.net/signalr/overview/signalr-20/extensibility/dependency-injection
在底部附近(正好在文本“RegisterHubs.Start”下方),我試圖使用Autofac重現一段Ninject代碼。
到目前為止,我已經成功地讓自己頭痛,但沒有多少。 我已經搜索了Autofac wiki和網絡以獲得一些幫助。 雖然,我相信我可能錯過了一些信息。
更新 :這是頁面上的相關Ninject代碼。
public static class RegisterHubs
{
public static void Start()
{
var kernel = new StandardKernel();
var resolver = new NinjectSignalRDependencyResolver(kernel);
kernel.Bind<IStockTicker>()
.To<Microsoft.AspNet.SignalR.StockTicker.StockTicker>()
.InSingletonScope();
kernel.Bind<IHubConnectionContext>().ToMethod(context =>
resolver.Resolve<IConnectionManager>().
GetHubContext<StockTickerHub>().Clients
).WhenInjectedInto<IStockTicker>();
var config = new HubConfiguration()
{
Resolver = resolver
};
App.MapSignalR(config);
}
}
更新2 :我還想添加試圖編寫的對象。
public class StockTickerHub : Hub
{
private readonly IStockTicker _stockTicker;
public StockTickerHub(IStockTicker stockTicker) { }
}
public class StockTicker
{
public StockTicker(IHubConnectionContext clients) { }
}
Autofac沒有等效的WhenInjectedInto
方法。 但是,您可以使用命名參數完成相同的操作。
嘗試這樣的事情
using Autofac.Integration.SignalR;
using Microsoft.AspNet.SignalR.StockTicker;
public static class RegisterHubs
{
public static void Start()
{
var builder = new ContainerBuilder();
builder.RegisterType<StockTicker>()
.WithParameter(ResolvedParameter.ForNamed("StockTickerContext"))
.As<IStockTicker>()
.SingleInstance();
builder.Register(c => GlobalHost.DependencyResolver.Resolve<IConnectionManager>().GetHubContext<StockTickerHub>().Clients)
.Named<IHubConnectionContext>("StockTickerContext");
var container = builder.Build();
var resolver = new AutofacDependencyResolver(container);
var config = new HubConfiguration { Resolver = resolver };
App.MapSignalR(config);
}
}
注意: AutofacDependencyResolver
來自Autofac.Integration.SignalR
。
更新 :啊,我錯過了鏈接頁面的細節; IHubConnectionContext
的工廠函數是使用解析器來獲取IConnectionManager
,而不是容器本身(當然容器不會知道IConnectionManager
)。 我切換到使用默認依賴項解析器( GlobalHost.DependencyResolver
)來獲取IConnectionManager
。 這應該工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.