Unity и конфигурация управления временем жизни - всегда временный менеджер времени жизни - PullRequest
4 голосов
/ 02 апреля 2012

У меня ошибка конфигурации с Unity.Я пытаюсь реализовать http://unitymvc3.codeplex.com/,, но я застрял прямо сейчас, из-за этого:

В моей конфигурации единства у меня есть эти настройки:

<register type="IMainDbContext" mapTo="WorkflowContext">
    <lifetime type="hierarchical" />
    <constructor></constructor>
  </register>

Но в то времясоздания единства, (мой простой код здесь:)

UnityConfigurationSection section = ConfigurationManager.GetSection("unity") as UnityConfigurationSection;
        if (section != null)
        {
            section.Configure(container);
        }

        this.container = container;

все настроено отлично, за исключением регистрации "IManDbContext", которая имеет LifetimeManagerType = {Name = "TransientLifetimeManager" FullName = "Microsoft.Practices.Unity.TransientLifetimeManager"}, но это должно быть hierarchical lifetime manager

Есть ли у вас какие-либо идеи, как сказать единство (в конфигурации, а не в коде) я хочу иерархический менеджер времени жизни?Спасибо за любые советы.

Ответы [ 2 ]

2 голосов
/ 10 апреля 2012

Моя ошибка была вызвана этой ошибкой: У меня есть несколько DbContext, но они были плохо настроены:

<register type="IMainDbContext" mapTo="WorkflowContext">
    <lifetime type="hierarchical" />
    <constructor></constructor>
</register>

<register type="IReportDbContext" mapTo="SomeBadContext">
    <lifetime type="hierarchical" />
    <constructor></constructor>
</register>

Когда я использовал эту конфигурацию, что было плохо, единство просто не настраивало никакой менеджер времени жизни. После того, как я настроил эти контексты правильно, Unity правильно использовала мои конфигурации менеджера времени жизни.

0 голосов
/ 03 апреля 2012

Не думаю, что ты можешь. Если вы указываете тип времени жизни, вам нужно указать «singleton» или «external» (внешний - это пользовательский срок действия).

Ссылка на документацию схемы Unity

Справедливости ради, если вы не используете несколько контейнеров Unity, я не вижу смысла в том, чтобы иметь иерархический менеджер времени жизни, так как он предназначен для того, чтобы у вас был только один экземпляр вашего типа, созданный в главном Контейнер Unity и любые дочерние контейнеры , которые вы генерируете из него.

Итак, если вы не планируете генерировать дочерние контейнеры и хотите получить отдельный экземпляр вашего объекта IMainDbContext, вы можете просто использовать «singleton» менеджер времени жизни.

...