Использование ASP.NET DI для SignalR с TinyIoC - PullRequest
1 голос
/ 06 октября 2019

В проекте я использую Nancy / TinyIoC для внедрения зависимостей. До сих пор у меня не было проблем.

Я добавил SignalR в свой проект и настроил свои концентраторы так, чтобы я вводил IHubContext в свой концентратор.

Я столкнулся с проблемой, котораякогда TinyIoC пытается разрешить одно из своих деревьев зависимостей, он запускается в тип ASP.NET и не может разрешить такое. Как мне обойти это? Моим первым предположением было зарегистрировать тип в TinyIoC, но это кажется утомительным.

Вот что у меня есть:

    public class Startup
    {
        public void Configure(IApplicationBuilder builder)
        {
            // Register types from ASP.net
            // Pass instances to UseNancy
            var hubContext = builder.ApplicationServices.GetService<IHubContext<MessageSender>>();

            builder
                .UseCors(AllowAllOrigins)
                .UseSignalR(HubRegistration.RouteRegistrations)
                .UseOwin(x => x.UseNancy());
        }

        public virtual void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>
            {
                options.AddPolicy(AllowAllOrigins,
                    builder =>
                    {
                        builder
                            .AllowAnyOrigin()
                            .AllowAnyMethod()
                            .AllowAnyHeader()
                            .AllowCredentials();
                    });
            });

            services.AddSignalR();
        }
    }

    public class MessageRepo : IRepository<Message>
    {
        private readonly IDatabase<Message> _database;
        private readonly IValidator<Message> _messageValidator;
        private readonly IMessageSender<Message> _hubContext;

        public MessageRepo(IDatabase<Message> database, IValidator<Message> messageValidator, IMessageSender<Message> hubContext)
        {
            _database = database;
            _messageValidator = messageValidator;
            _hubContext = hubContext;
        }
    }

    public class MessageSender : Hub, IMessageSender<Message>
    {
        public MessageSender(IHubContext<MessageSender> context)
        {
            _context = context;
        }
    }

...