Используя блок приложения Unity, как вы можете заставить конфигурацию Unity создать новый экземпляр объекта, когда мы вызываем метод UnityContainer.Resolve<T>()
в контексте WCF?
Как вы можете заставить Unity создать новый экземпляр?
- Какой жизненный менеджер вы используете? Кроме того, вы хотите избавиться от неуправляемого объекта? 21.08.2012
- Я не настроил менеджера жизни, мне нужно избавиться от объектов репозитория 21.08.2012
- почему вы знаете, что ваш объект репозитория не удален? 22.08.2012
- Если я вручную обновляю базу данных, это не отражается в Entity Framework, также я включил строку в метод Dispose для регистрации того факта, что метод вызывается в текстовом файле, а журнал не создается. 22.08.2012
- Я понял, ну, Unity не поддерживает вызов Dispose для вас, он просто освобождает ссылку и позволяет GC собирать. Большинство IoC вам нужно вручную удалить 22.08.2012
Ответы:
Lifetime Manager в Unity
— это все, что тебе нужно. По умолчанию Unity использует TransientLifetimeManager
:
TransientLifetimeManager. Для этого диспетчера времени жизни Unity создает и возвращает новый экземпляр запрошенного типа для каждого вызова метода Resolve или ResolveAll. Этот менеджер времени жизни используется по умолчанию для всех типов, зарегистрированных с помощью метода RegisterType, если вы не укажете другой менеджер времени жизни.
Если вам нужно использовать другой менеджер времени жизни, просто укажите в методе Register
:
var container = new UnityContainer();
container.RegisterType<IMyType, MyType>(new PerResolveLifetimeManager());
Использование RegisterType
без a LifetimeManager
должно вводить новый экземпляр типа каждый раз, когда он вводится
Из MSDN:
Если вы не укажете значение для времени жизни, тип будет зарегистрирован для переходного времени жизни, что означает, что новый экземпляр будет создаваться при каждом вызове Resolve.