使用Autofac注册基类的实现,以通过IEnumerable传入

 鸣丸子圓的睿哥 发布于 2023-02-12 21:42

我有一个基类,还有一系列继承自此类的其他类:(
请原谅过度使用的动物类比)

公共抽象类Animal {}

公共类狗:动物{}

公共课Cat:Animal {}

然后我有一个依赖于一个类的类 IEnumerable

public class AnimalFeeder
{
    private readonly IEnumerable _animals;

    public AnimalFeeder(IEnumerable animals )
    {
        _animals = animals;
    }
}

如果我手动做这样的事情:

var animals =
    typeof(Animal).Assembly.GetTypes()
        .Where(x => x.IsSubclassOf(typeof(Animal)))
        .ToList();

然后我可以看到它返回Dog并且Cat

但是,当我尝试连接我的Autofac时:

builder.RegisterAssemblyTypes(typeof(Animal).Assembly)
    .Where(t => t.IsSubclassOf(typeof(Animal)));

builder.RegisterType();

AnimalFeeder被实例化,没有Animal在传递给构造函数.

我错过了什么吗?

1 个回答
  • As<Animal>()在注册时错过了电话.

    如果没有它,Autofac会使用默认AsSelf()设置注册您的类型,因此IEnumerable<Animal>只有在您使用像Dog和Cat这样的子类型时,如果您要求基类型,则不会获得您的类.

    所以将注册更改为:

    builder.RegisterAssemblyTypes(typeof(Animal).Assembly)
         .Where(t => t.IsSubclassOf(typeof(Animal)))
         .As<Animal>();
    

    2023-02-12 21:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有