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