Unity容器的类型名称相同,但来自不同的命名空间



我必须构建一个统一容器来在我的asp.net项目中注入依赖项。在那个项目中,我必须注册两个类型,它们来自不同的名称空间,但名称相同。那么,如何将这两种类型注册到一个统一容器中呢?

container.RegisterType<IType, Type>()
container.RegisterType<IType, Type>();

这里ITypes和Types来自不同的命名空间。但是有相同的名字。那么,我如何在一个容器中注册这两个呢?我使用的是Unity Container 5.2.0.0版

我没有使用Unity,但假设它与任何其他容器相同,它应该像这样简单:

container.RegisterType<NamespaceA.IType, NamespaceA.Type>()
container.RegisterType<NamespaceB.IType, NamespaceB.Type>();

本质上,类型将使用其Type元数据在内部注册,因此容器将把它们视为两个完全独立的类型,就像它们被称为ITypeAITypeB一样。

然后,当你注入它们时,你只需要确保你引用了正确的名称空间。

如果同时需要这两个名称空间,请显式引用这两个命名空间:

public MyService(NamespaceA.IType aType, NamespaceB.IType bType)

或者,如果您只需要一个,那么只需使用using(或显式(引用命名空间,并将其正常注入:

using NamespaceA;
public class MyService
{
public MyService(IType aType)
{
}
}

最新更新