Лучший способ выставить IServiceCollection для проверки регистрации? - PullRequest
0 голосов
/ 18 декабря 2018

Я обновляю старый код автофака, который уже некоторое время использую для проверки регистраций ioc;использовать его со встроенным контейнером IOC MS в aspnetcore.Некоторые из более новых apis встроены в aspnetcore и не используют autofac.

Ниже песочница, с которой я играю:

namespace GatewayProxy.Tests
{
    [TestFixture]
    public class Tests : GivenTheNetCoreService<ITestReg>
    {
        private TestServer _server;
        private HttpClient _client;

        protected override void GivenThat()
        {
            _server = new TestServer(new WebHostBuilder().UseStartup<Startup>());
            _client = _server.CreateClient();
            base.GivenThat();
        }

        [Test]
        public void Test1()
        {
            Result.Should().BeOfType<TestReg>();
        }
    }

    [TestFixture]
    public abstract class GivenTheNetCoreService<T> where T : class
    {
        private ServiceCollection _serviceCollection;
        public T Result { get; private set; }

        [OneTimeSetUp]
        public void Setup()
        {
            GivenThat();

            When();
        }

        protected virtual void GivenThat()
        {
            _serviceCollection = new ServiceCollection();
        }

        protected virtual void When()
        {
            using (var serviceProvider = _serviceCollection.BuildServiceProvider().CreateScope())
            {
                Result = serviceProvider.ServiceProvider.GetRequiredService<T>();
            }
        }
    }
}

В моем файле startup.cs у меня есть:

private void IocRegistrations(IServiceCollection services)
{
    services.AddTransient<ITestReg, TestReg>();
}

Result свойство равно нулю, потому что ServiceProvider не имеет никаких реализованных услуг.Так что же лучше всего проверить, чтобы ITestReg был правильно зарегистрирован?

1 Ответ

0 голосов
/ 19 декабря 2018

Вы можете получить доступ к услугам по server.Host.Services.

using Microsoft.Extensions.DependencyInjection;

var server = new TestServer(
                WebHost.CreateDefaultBuilder()
                        .UseStartup<Startup>()
    );
var testReg = server.Host.Services.GetRequiredService<ITestReg>();
var test = testReg.HelloWorld();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...