Моя проблема проста!Как я могу разрешить вручную этот зарегистрированный интерфейс:
services.AddScoped<ICommandHandler<Command>, AddProductCommandHandler>();
Этот код не работает и всегда возвращает null
:
Мой DiContainer
выглядит так:
public class ProviderDiContainer : IDiContainer
{
private readonly ServiceProvider _container;
public ProviderDiContainer(ServiceProvider container)
{
_container = container;
}
public T Resolve<T>()
{
return _container.GetService<T>();
}
}
Который зарегистрирован так:
public void ConfigureServices(IServiceCollection services)
{
var diContainer = new ProviderDiContainer(services.BuildServiceProvider());
services.AddSingleton<IDiContainer>(c => diContainer);
// Register some other things here Registrar.RegisterSomethings(services);
services.AddSingleton(s => new ServiceLocator(diContainer));
}
А мой Сервисный локатор:
public class ServiceLocator
{
public ServiceLocator(IDiContainer container)
{
Current = container;
}
public static IDiContainer Current
{
get;
private set;
}
}
Теперь, когда я вызываю этот код, он возвращает мне null
:
var commandHandler = ServiceLocator.Current.Resolve<ICommandHandler<TCommand>>();
Примечание : Для разрешения ServiceLocator
и DbiContainer
сначала я помещаю их в Configure
метод StartUp