AutoFixture可以通过约定注册接口吗?

4im*_*ble 3 c# autofixture

我的应用程序是使用简单的注入器来处理我的ioc.我有一些像下面的代码会做一些自动注册.

RegisterForAssembly(container, webApiLifestyle, typeof(IAddEntityCommand).Assembly, "MyProj.CommandQuery.Commands");
RegisterForAssembly(container, webApiLifestyle, typeof(IGetAllEntityQuery).Assembly, "MyProj.CommandQuery.Queries");

private static void RegisterForAssembly(Container container, WebApiRequestLifestyle webApiLifestyle, Assembly assembly, string nameSpace)
{
    var registrations =
       from type in assembly.GetExportedTypes()
       where type.Namespace == nameSpace
       where type.GetInterfaces().Any()
       select new { InterfaceType = type.GetInterfaces().Single(), ConcreteType = type };

     foreach (var reg in registrations)
     {
        container.Register(reg.InterfaceType, reg.ConcreteType, webApiLifestyle);
     }
}
Run Code Online (Sandbox Code Playgroud)

它基本上是在一个程序集中查找并将任何接口与它的具体命名空间配对.

我希望使用AutoFixture实现类似的功能

    private static void RegisterForAssembly(Fixture fixture, Assembly assembly, string nameSpace)
    {
        var registrations =
            from type in assembly.GetExportedTypes()
            where type.Namespace == nameSpace
            where type.GetInterfaces().Any()
            select new { InterfaceType = type.GetInterfaces().Single(), ConcreteType = type };

        foreach (var reg in registrations)
        {
            //fixture.Register... ???
            //fixture.Register<reg.InterfaceType>(() => fixture.Create<reg.ConcreteType>();
        }
    }
Run Code Online (Sandbox Code Playgroud)

然后我想知道我是否重新发明轮子,它可能是内置的东西,但我在文档中找不到任何东西.

==短版本==

我想配置自动夹具,为给定的接口提供正确的具体,而无需单独注册它们.

Mar*_*ann 6

您可以使用TypeRelay实例.对于每一对,您可以执行以下操作:

fixture.Customizations.Add(new TypeRelay(anInterfaceType, aConcreteType));
Run Code Online (Sandbox Code Playgroud)