我最近开始了一个新的职位并继承了一些代码,我试图弄清楚它是如何为了重构应用程序而工作的。我之前使用过Unity,但对它所做的一切以及它是如何做到这一点都没有很好的理解。我观看过很多教程,但没有一个能够触及看起来像这样的代码。谁能解释下面的内容呢?
unityContainer.RegisterInstance(
"IntegrationEntityContent",
ConfigurationManager.ConnectionStrings["IntegrationEntities"].ConnectionString,
new ContainerControlledLifetimeManager())
.RegisterType<IIntegrationEntities, IntegrationEntities>(
new HierarchicalLifetimeManager(),
new InjectionConstructor());
我知道RegisterInstance提供了对象的单例实例,但似乎只分发了连接字符串的一个实例。我无法弄清楚IntegrationEntities类型如何从上面的代码中获取连接字符串,以及应用程序每次要求获取新的IntegrationEntities实例时都是如此。
答案 0 :(得分:1)
unityContainer.RegisterType<IIntegrationEntities, IntegrationEntities>(
new HierarchicalLifetimeManager(),
new InjectionConstructor());
此代码使用ContainerControlledLifetimeManager对连接字符串进行命名注册,该注册表将现有对象注册为单例实例。
<Grid Grid.Column="2">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding ElementName=listBox1, Path=SelectedItem._title}"/>
<TextBlock Grid.Row="1" Text="{Binding ElementName=listBox1, Path=SelectedItem._artist}"/>
<TextBlock Grid.Row="2" Text="{Binding ElementName=listBox1, Path=SelectedItem._genre}"/>
<TextBlock Grid.Row="3" Text="{Binding ElementName=listBox1, Path=SelectedItem._type}"/>
</Grid>
下一个语句将 IntegrationEntities 类注册到分层生命周期管理器。它类似于单例生命周期管理器,但会返回子容器的不同实例(如果有的话)。
IntegrationEntities类型如何从中获取连接字符串 上面的代码
您可以按名称解析具体注册。对于字符串类也是如此。我认为 IntegrationEntities 的构造函数具有Unity属性,其中包含&#34; IntegrationEntityContent &#34;它允许Unity容器在Resolve上注入正确的连接字符串。
如果应用程序正在获取新的IntegrationEntities实例 每次它要求一个
使用此配置,Unity将为每个容器返回相同的实例。如果容器已定义子容器,则它们将具有 IntegrationEntities 的自己的实例。