autofac和控制台应用程序的注册混淆

本文关键字:注册 应用程序 控制台 autofac | 更新日期: 2023-09-27 17:59:23

我正试图在控制台应用程序中使用autofac进行依赖项注入。我遇到了autofac找不到某些接口/类的构造函数的问题。

这是我的最新例子:

I存储:

public interface IRepository<Planetary>
{
    IEnumerable<Planetary> Get();
}

IPlanetaryRepository:

public interface IPlanetaryRepository : IRepository<Planetary>
{
    IQueryable<Planetary> GetPlanetary(SystemProbe user);
}

飞机服务:

public interface IPlanetaryService
{
    Task<Planetary> Clone(Planetary source);
}
public sealed class PlanetaryService : IPlanetaryService
{
    private IPlanetaryRepository Repo { get; }
    public PlanetaryService(IPlanetaryRepository repo)
    {
        Repo = repo;
    }
}

调度程序:

public class Scheduler
{
    private static IContainer Container { get; set; }
    static void Main()
    {
        var builder = new ContainerBuilder();
        builder.RegisterType<PlanetaryService>().As<PlanetaryService>();
        builder.RegisterType<IPlanetaryRepository>().As<IPlanetaryRepository>();
        Container = builder.Build();
        GenerateSchedules();
    }
    public static void GenerateSchedules()
    {
        using (var scope = Container.BeginLifetimeScope())
        {
            var repo = scope.Resolve<PlanetaryService>();    <-- line where exception is thrown
        }
    }
}

在类型"IPlanetaryRepository"上找不到具有构造函数查找器"Autofac.Core.Activators.Reflection.DefaultConstructorFinder".

如果我取出IPlanetaryRepository,我会得到这个异常:

无法解析构造函数的参数IPlanetaryRepository repo。。。

所以我真的不知道该怎么办。"PlanetaryService"需要"IPlanetaryRepository"作为参数,但IPlanetary Repository没有构造函数。

有没有办法纠正这种情况?

autofac和控制台应用程序的注册混淆

您没有任何实现IPlanetaryRepository的类,因此它找不到构造函数。