Unity 解析基于 class 个请求实例

Unity resolve based on class requesting instance

我正在尝试在 Unity 中设置注册,但我无法准确获得我需要的内容。

假设我有以下定义:

public interface ISomeInterface { ... }

public interface ISomeDependency { ... }

public class DependencyA : ISomeDependency { ... }

public class DependencyB : ISomeDependency { ... }

public class SomeClassA : ISomeInterface
{
    public SomeClassA(ISomeDependency dep){ ... }
}

public class SomeClassB : ISomeInterface
{
    public SomeClassB(ISomeDependency dep){ ... }
}

然后我用Unity注册它们如下:

Container.RegisterType<ISomeDependency, DependencyA>("DependencyA");
Container.RegisterType<ISomeDependency, DependencyB>("DependencyB");
Container.RegisterType<ISomeInterface, SomeClassA>("ClassA");
Container.RegisterType<ISomeInterface, SomeClassB>("ClassB");

我还注册了一家工厂,它将根据密钥构建 ISomeInterface

Container.RegisterType<Func<string, ISomeInterface>(new InjectionFactory(c=>
{
    return new Func<string, ISomeInterface>(x=>
    {
        return c.Resolve<ISomeInterface>(x)
    }
}));

(顺便说一句,如果有人知道创建键控工厂的更好方法,我欢迎提供提示)

我如何配置 Unity,以便在 Unity 为我构建 SomeClassA 的实例时,它也会注入 DependencyA 的实例?同样,当Unity给我构建一个SomeClassB的实例时,它会注入一个DependencyB的实例。

感谢您的帮助。

编辑:更正了我的错字

如果您为一个接口注册两种具体类型,Unity 将不知道要解析为哪一种。您必须提供更多信息。一种方法是使用参数覆盖。

// Override the constructor parameter "dep" value
// Use DependencyA instead of other value
var result = container.Resolve<ISomeInterface>(
    new ParameterOverride("dep", new DependencyA())
        .OnType<SomeClassA>());

但是,您还注册了机器人 SomeClassASomeClassB 作为 ISomeInteface 的类型,因此您还必须告诉 Unity 您想要其中的哪一个实现你想要一个 ISomeInterface.