1

如果我注册了同一个合约的两个实现,则使用 DryIoc - 在使用构造函数注入时如何控制使用哪个实现?

我看到您可以使用密钥或元数据注册 - 是否可以(使用属性?)通过注入实现来控制?或者我应该需要一个集合并找出ctor中的正确实现吗?

4

1 回答 1

1

您可以通过 Made.Of 强类型规范指定要在构造函数中使用的依赖项,如下所示:

container.Register<SomeClient>(Made.Of(
   () => new SomeClient(Arg.Of<IDep>("service key of impl")));

这是带有更多选项的相关 SO 答案。

通过MEF Attributed Model支持属性注册:

[Export]
public class SomeClient {
    public SomeClient([Import("x")]IDep dep) {}
}

[Export("x", typeof(IDep))]
public class X : IDep {}

[Export("y", typeof(IDep))]
public class Y : IDep {}

// in composition root:
using DryIoc.MefAttributedModel;

container = new Container().WithMefAttributedModel();

container.RegisterExports(
    typeof(SomeClient),
    typeof(X),
    typeof(Y));

container.Resolve<SomeClient>(); // will inject X
于 2016-03-10T16:52:05.453 回答