Autofac相当于这个Ninject代码的是什么?

 Scarlett_girl 发布于 2023-02-11 16:29

在下一页: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()
            .To()
            .InSingletonScope();

        kernel.Bind().ToMethod(context =>
                resolver.Resolve().
                    GetHubContext().Clients
            ).WhenInjectedInto();

        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) { }
}

khellang.. 12

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()
            .WithParameter(ResolvedParameter.ForNamed("StockTickerContext"))
            .As()
            .SingleInstance();

        builder.Register(c => GlobalHost.DependencyResolver.Resolve().GetHubContext().Clients)
            .Named("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,而不是容器本身(当然容器不会知道a IConnectionManager).我切换到使用默认依赖项解析器(GlobalHost.DependencyResolver)来获取IConnectionManager.这应该工作.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有