gpt4 book ai didi

dependency-injection - 如何使用 Unity 在每次处理旧实例时解析新实例

转载 作者:行者123 更新时间:2023-12-01 08:59:45 25 4
gpt4 key购买 nike

我正在尝试开始使用 Unity,但我有一点库存。

我有一个 Context 类和一个由容器解析的 Repository 类。我的 Repository 类采用 Context ctor 参数作为依赖项。

我的配置文件:

容器:

  <register type="IGeneralContext" mapTo="Data.EF.EFContext, Data.EF">
<lifetime type="singleton" />
<constructor>
<param name="connectionString">
<value value="anyConnStr"/>
</param>
</constructor>
</register>

<register type="IClienteRepository" mapTo="Repository.EF.ClientRepository, Repository.EF">
<constructor>
<param name="context">
<dependency type="Data.EF.EFContext, Data.EF"/>
</param>
</constructor>
</register>

现在,我希望在调用 Resolve 并且旧实例已经释放时构造 IGeneralContext 的新实例。

参见:

using (IGeneralContext context = container.Resolve<IGeneralContext>()) //NEW CONTEXT INSTANCE
{
IClienteRepository rep = container.Resolve<IClienteRepository>(); // USE DEPENDENCY AS SINGLETON
Cliente nc = new Cliente() { };
rep.Add(nc);
context.CommitChanges();
} // DISPOSE CONTEXT

using (IGeneralContext context = container.Resolve<IGeneralContext>()) //BRAND NEW CONTEXT INSTANCE
{
IClienteRepository rep = container.Resolve<IClienteRepository>(); // USE DEPENDENCY AS SINGLETON
Cliente nc = new Cliente() { };
rep.Add(nc);
context.CommitChanges();
} // DISPOSE CONTEXT

IClienteRepository rep1 = container.Resolve<IClienteRepository>(); // NEW CONTEXT AGAIN
Cliente cliente1= rep1.GetById(1);

知道如何使用 Unity 解决这个问题吗?

谢谢。

最佳答案

在分析了更好的詹姆斯建议后,我找到了一个很好的替代方案。

有一种将实例化委托(delegate)给工厂的新方法:

        container.RegisterType<IMyInterface, MyConcrete>(new InjectionFactory(c => MyFactoryClass.GetInstance()));

而且还可以扩展配置文件来为您完成此操作。

请参阅 CodePlex 上的 ctavares 帖子,他/她有一个非常好的示例。 http://unity.codeplex.com/Thread/View.aspx?ThreadId=219565

关于dependency-injection - 如何使用 Unity 在每次处理旧实例时解析新实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4174780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com