DryIoc寄存器接口的许多实现

DryIoc寄存器接口的许多实现,dryioc,Dryioc,看看DryIoc的例子,似乎这些例子与我所需要的正好相反,我想知道这是否可能 Wiki部分示例 像这样的事情是可以开箱即用的吗?或者我需要自己制作扩展方法吗?这不会是一个很大的麻烦,我可能会在很短的时间内完成它,但是我想知道未来的参考和学习DryIoc容器。提前通知: 存在RegisterMany重载,它接受程序集和服务类型条件,例如: 上面从A的程序集注册X的所有实现。存在RegisterMany重载,它接受程序集和服务类型条件,例如: 上面从A的汇编中注册了X的所有实现。Thnx明天将对其进

看看DryIoc的例子,似乎这些例子与我所需要的正好相反,我想知道这是否可能

Wiki部分示例

像这样的事情是可以开箱即用的吗?或者我需要自己制作扩展方法吗?这不会是一个很大的麻烦,我可能会在很短的时间内完成它,但是我想知道未来的参考和学习DryIoc容器。提前通知:

存在RegisterMany重载,它接受程序集和服务类型条件,例如:

上面从A的程序集注册X的所有实现。

存在RegisterMany重载,它接受程序集和服务类型条件,例如:


上面从A的汇编中注册了X的所有实现。

Thnx明天将对其进行测试:看起来它仍然计算一个类型。在我的例子中,我有一个类不应该在DI容器中,因为它有几个具有不同参数的构造函数。我的serviceTypeCondition代码对所提到的类返回false,但后来我仍然得到一个异常:无法从实现类型中选择单个公共构造函数。Thnx将在明天进行测试:看起来它仍然计算一个类型。在我的例子中,我有一个类不应该在DI容器中,因为它有几个具有不同参数的构造函数。我的serviceTypeCondition代码对所提到的类返回false,但后来我仍然得到异常:无法从实现类型中选择单个公共构造函数。我在更新代码中看到问题:type=>type.IsAssignableTotypeofIImporter&&type.IsClass&!type.isabstract该条件适用于服务类型,而不适用于实现类型。因此,如果要将其注册为寄存器等,或者使其类型=>type.IsAssignableTotypeofIImporter&&type.IsInterface用于注册所有IImporter派生接口,则type=>type==typeofIImporter就足够了。回到谓词,它将注册具体类型,而不是注册。我在更新代码中看到问题:type=>type.IsAssignableTotypeofIImporter&&type.IsClass&!type.isabstract该条件适用于服务类型,而不适用于实现类型。因此,如果要将其注册为寄存器等,或者使其类型=>type.IsAssignableTotypeofIImporter&&type.IsInterface用于注册所有IImporter派生接口,则type=>type==typeofIImporter就足够了。回到谓词,它将注册具体类型,而不是注册。
public interface X {}
public interface Y {}

public class A : X, Y {}
public class B : X, IDisposable {}


// Registers X, Y and A itself with A implementation 
container.RegisterMany<A>();

...
container.RegisterMany<X>();

// This would return one implementation each of A and B
container.ResolveMany<X>();
namespace Assembly.A
{
    interface IImporter { }

    abstract class ImporterBase : IImporter { }
}

namespace Assembly.B
{
    interface IStuffImporter : IImporter { }
    interface IOtherImporter : IImporter { }

    class StuffImporter : ImporterBase, IStuffImporter { }
    class OtherImporter : ImporterBase, IOtherImporter { }
}

namespace Assembly.C
{
    class Program
    {
        void Main()
        {
            var container = new Container();

            container.RegisterMany( new[] { typeof(StuffImporter).Assembly }, type => type.IsAssignableTo(typeof(IImporter)) && type.IsClass && !type.IsAbstract);
            //I would like DryIoc to do the following behind the scenes
            //container.Register<IStuffImporter, StuffImporter>();
            //container.Register<IOtherImporter, OtherImporter>();

            var importers = container.ResolveMany<IImporter>();

            importers.Should().HaveCount(2);
            importers.First().Should().BeOfType<StuffImporter>().And.BeAssignableTo<IStuffImporter>();
            importers.Last().Should().BeOfType<OtherImporter>().And.BeAssignableTo<IOtherImporter>();
        }
    }
}
container.RegisterMany(new[] { typeof(A).Assembly }, 
    serviceTypeCondition: type => type == typeof(X));