Unity和生命周期管理配置 - 总是瞬态生命周期管理器

时间:2012-04-02 12:47:27

标签: entity-framework-4.1 unity-container n-layer

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 个答案:

答案 0 :(得分:2)

我的错误是由此错误引起的: 我有多个DbContext,但配置错误:

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

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

当我使用这个配置时,这很糟糕,统一简单不要配置任何终身经理。在我将这些上下文设置为正确之后,unity使用了我的生命周期管理器配置。

答案 1 :(得分:0)

我认为你不能。如果您要指定生命周期类型,则需要提供“singleton”或“external”(外部是自定义生命周期)。

Link to Unity Schema Documentation

公平地说,除非你使用多个Unity容器,否则我看不到拥有分层生命周期管理器的价值,因为这样做是为了确保你只在主体中实例化一个类型的实例您从中生成的统一容器和任何子容器

因此,除非您计划生成子容器并想要一个单独的IMainDbContext inplmenting对象实例,否则您可能只使用“singleton”生命周期管理器。