加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 23:27:11 所属栏目:百科 来源:网络整理
导读:我的应用程序是使用简单的注入器来处理我的ioc. 我有一些像下面的代码会做一些自动注册. RegisterForAssembly(container,webApiLifestyle,typeof(IAddEntityCommand).Assembly,"MyProj.CommandQuery.Commands");RegisterForAssembly(container,typeof(IGetAl
我的应用程序是使用简单的注入器来处理我的ioc.
我有一些像下面的代码会做一些自动注册.

RegisterForAssembly(container,webApiLifestyle,typeof(IAddEntityCommand).Assembly,"MyProj.CommandQuery.Commands");
RegisterForAssembly(container,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);
     }
}

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

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

private static void RegisterForAssembly(Fixture fixture,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>();
        }
    }

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

==
短版本==

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

解决方法

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

fixture.Customizations.Add(new TypeRelay(anInterfaceType,aConcreteType));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读