2012-04-02 66 views
4

我有Unity配置错误。 我想实现http://unitymvc3.codeplex.com/,但我stucked现在,因为这样:统一和生命周期管理配置 - 总是瞬间生命期管理器

在我的统一配置我有这样的设置:

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

但在创造团结的时间(我的简单代码是在这里:)除了具有LifetimeManagerType = {Name = "TransientLifetimeManager" FullName = "Microsoft.Practices.Unity.TransientLifetimeManager"}注册“IManDbContext”的

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

     this.container = container; 

一切配置伟大,但它应该是hierarchical lifetime manager

你有什么想法如何告诉团结(在配置中,而不是在代码中)我想要层次结构生命管理器? 感谢您的任何提示。

回答

2

我的错误是造成此错误: 我有多个的DbContext,但他们竟被配置:

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

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

当我使用这个配置,这是不好的,团结简单不`吨配置任何一生经理。在我将这些背景设置正确后,团结使用了我的终生经理配置。

0

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

Link to Unity Schema Documentation

公平地说,除非你使用多个统一容器我没有看到具有层次一生经理的价值,因为这是为了确保你只有你的类型的一个实例在主统一容器中实例化以及您从其生成的任何子容器

所以,除非你打算生成子容器,并且需要一个单独的IMainDbContext实例来扩充对象,否则你可能只使用“singleton”生存管理器。

+0

您为旧配置架构指出的文档链接,在页面顶部显然标记为废弃。你可以在配置中指定层次结构,这是一个默认的别名。有关更多详细信息,请参阅[默认别名列表](http://msdn.microsoft.com/zh-cn/library/ff660933(v = pandp.20).aspx)。 – 2012-04-05 02:48:48

+0

非常感谢您的帮助,请购买我可以肯定使用层次结构生命期管理器。最后它是由我的愚蠢造成的,因为我使用了更多的数据库上下文,并且他们的配置很糟糕。 – clpx 2012-04-06 12:28:18

+0

解决方案是什么?你应该把它作为你自己问题的答案发布 – 2012-04-09 20:11:50

相关问题