Я обновляю старый код автофака, который уже некоторое время использую для проверки регистраций 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
был правильно зарегистрирован?