NhRepositoryFactory
не содержит бизнес-логики и может быть частью вашего корня композиции. Это позволяет вам иметь ссылку на контейнер. Это просто механика и не считается анти-паттерном сервисного локатора. NhRepositoryFactory
будет выглядеть так:
// This class is part of your composition root
public class NhRepositoryFactory : IRepositoryFactory
{
private readonly Container container;
public NhRepositoryFactory(Container container)
{
this.container = container;
}
public IRepository<T> Create<T>() where T : Entity
{
return this.container.Resolve<NhRepository<T>>();
}
}
И вы можете зарегистрировать это так:
builder.Register<IService>(c => new NhRepositoryFactory(c))
.SingleInstance();