我将API迁移到ASP.NET Core。在我的旧项目中,我有这样的服务注册:
public static void Register(HttpConfiguration config)
{
...
var container = IoCContainer.Instance;
container.RegisterType<IEventStoreUnitOfWork<IDomainEvent>, EventStoreUnitOfWork<IDomainEvent>>(new ContainerControlledLifetimeManager());
container.RegisterInstance(typeof (IUnitOfWork), container.Resolve<IEventStoreUnitOfWork<IDomainEvent>>());
...
}
我无法弄清楚如何在ASP.NET Core项目中使用IServiceProvider
重现第二行(IUnitOfWork注册)。我不明白的是如何制作像container.Resolve<IEventStoreUnitOfWork<IDomainEvent>>
这样的东西。
答案 0 :(得分:0)
我不太清楚我明白你的代码应该做什么(你的注册)。
这有点奇怪,因为你在第一行注册了一个单身,你似乎解决了它类似于第二行中的瞬态,但由于它被注册为单身,它总会返回相同。那么第二行应该做什么?
您在寻找工厂方法吗?
public static void Register(IServiceCollection services)
{
services.AddSingleton<IEventStoreUnitOfWork<IDomainEvent>,EventStoreUnitOfWork<IDomainEvent>>();
// AddScoped = request-lifetime, AddTransint = instantiate on each resolve
services.AddScoped<IUnitOfWork>( provider => provider.RequestService<IEventStoreUnitOfWork<IDomainEvent>>();
}
AddXxx
方法的第二个重载允许您使用委托来提供工厂方法。传递给委托的参数将是IServiceProvider
(它是从IServiceCollection
构建后的容器),因此您可以调用RequestService
(是ASP.NET内核)在其中的Resolve
方法)并返回已解析的类型。