У меня есть примерно такая модель:
public interface IUnitOfWork { }
public class UnitOfWork : IUnitOfWork { }
public interface IService { }
public class Service : IService
{
public IUnitOfWork UnitOfWork { get; set; }
}
public class ViewModel
{
public IService Service { get; set; }
}
И конфигурация, которая может быть такой:
container.Register(Component.For<IService>().ImplementedBy<Service>()
.LifeStyle.Transient
Component.For<IUnitOfWork>().ImplementedBy<UnitOfWork>()
.LifeStyle.Transient,
Component.For<ViewModel>().LifeStyle.Transient);
Мне нужно разрешить в разных точках два экземпляраViewModel (для этого я использую типизированную фабрику, но для простоты оставим это в стороне и предположим, что я использую необработанный контейнер)
Подвох в том, что мне нужно разрешить два экземпляра ViewModel
в разных точках (из другой ViewModel, которая знает об обоих), и им нужно совместно использовать один и тот же IUnitOfWork
.
Итак, что-то вроде этого:
var vm1 = container.Resolve<ViewModel>();
//...later
var vm2 = container.Resolve<ViewModel>();
Теперь очень просто поделиться Сервисом .Мне просто нужно сделать что-то вроде:
var vm2 = container.Resolve<ViewModel>(new { vm1.Service });
Но, конечно, реальная модель более сложная (разные модели ViewMode, с большим количеством служб в каждой), так что это не вариант.
Я могу передать UnitOfWork
в Resolve
, но он не используется по умолчанию (что имеет смысл).Есть ли способ использовать этот параметр (возможно, путем регистрации делегата) при разрешении второго ViewModel
?
Я хотел бы иметь возможность сделать следующее:
var vm2 = container.Resolve<ViewModel>(new { UnitOfWork });
И получите ViewModel
, у которого Service
есть конкретный UnitOfWork
.