gpt4 book ai didi

inversion-of-control - 如何在多项目解决方案中使用 Unity 进行解析

转载 作者:行者123 更新时间:2023-12-04 08:21:37 24 4
gpt4 key购买 nike

在一个新的 WPF 项目(VS2010)中,我第一次使用 Unity 2。
在这个项目中,我使用以下结构:

解决方案

WPF 项目

类库1

类库2

类库 3 ....

使用 Unity 注册不同的类型是在 WPF 项目中使用以下代码段完成的:

IUnityContainer container = new UnityContainer()
.RegisterType<IObjectContext, ObjectContextAdapter>()
.RegisterType<IConnectionStringProvider, ConnectionStringProvider>()
.RegisterType(typeof(IRepository<>), typeof(Repository<>));

现在假设我想获取存储库 <Orders > 在 Class Library1 中解析的构造函数注入(inject)。
显然容器在其他项目中是未知的!

我该怎么做?

最佳答案

我基本同意 Chris 的回答,但我认为配置文件很糟糕(尤其是对于 Unity),所以这里有一个解决方案,允许您使用运行时配置而没有循环引用。我们将通过注册表来做到这一点。

创建一个将包含 IConfigureUnity 的基础结构项目。

public interface IConfigureUnity
{
public void Configure(UnityContainer container);
}

您的每个类库项目都将负责实现此接口(interface)以注册它自己的类。
public class RegistryForSomeClassLibrary : IConfigureUnity
{
public void Configure(UnityContainer container)
{
container
.RegisterType<IObjectContext, ObjectContextAdapter>()
.RegisterType<IConnectionStringProvider, ConnectionStringProvider>()
.RegisterType(typeof(IRepository<>), typeof(Repository<>));
}
}

然后在您的 WPF 项目中,您需要创建容器并应用这些注册表。
var container = new UnityContainer();
new RegistryForSomeClassLibrary().Configure(container);
new RegistryForAnotherClassLibrary().Configure(container);

现在你有一个完全配置的容器实例,没有任何配置文件。

关于inversion-of-control - 如何在多项目解决方案中使用 Unity 进行解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3012462/

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