gpt4 book ai didi

c# - Autofac 无法解析 DbContext

转载 作者:行者123 更新时间:2023-11-30 21:49:25 24 4
gpt4 key购买 nike

我从 Autofac 收到此错误消息:

在类型“MyService`1[MyContext]”上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的构造函数都不能用可用的服务和参数调用:无法解析构造函数“Void .ctor(MyContext)”的参数“MyContext 上下文”。

错误发生在这行代码(也显示在下面的代码中):

IMyService myService = container.Resolve<IMyService>();  // error here

我有兴趣注意到,当我在注册中包含这一行时,一切正常:

builder.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());

事实上,当我注册 AnyConcreteType 时一切正常...让我相信我不是没有注册某些东西。我的问题是我没有注册什么?错误消息似乎将 MyContext 命名为罪魁祸首,但显然我正在注册它,如下所示。
我真的不想使用 AnyConcreteType... 包罗万象,因为我只想显式注册我需要的类。

我的服务是这样构建的:

public class MyService<T> : BaseService<T>, IMyService where T:DbContext,IMyContext
{
public MyService(T context) : base(context)
{
}
}

MyService 派生自 BaseService:

public abstract class BaseService<T> : IDisposable where T:DbContext, IMyContext
{
internal T db;

public BaseService(T context)
{
db = context;
}
}

MyContext 被传递给 MyService,其构造如下:

public partial class MyContext : DbContext, IMyContext
{
public MyContext(INamedConnectionString conn)
: base(conn.ConnectionString)
{
Configuration.ProxyCreationEnabled = false;
}
}

这里是 NamedConnectionString

public class NamedConnectionString : INamedConnectionString
{
public string ConnectionString { get; set; }
}

下面是我注册上面的方法:

builder.RegisterType<MyService<MyContext>>().As<IMyService>();  
builder.RegisterType<NamedConnectionString>().As<INamedConnectionString>().SingleInstance();
builder.RegisterType<MyContext>().As<IMyContext>().InstancePerLifetimeScope();
builder.RegisterType<DbContext>(); // is this necessary??

我是这样调用它的:

    var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
INamedConnectionString namedConnectionString = container.Resolve<INamedConnectionString>();
namedConnectionString.ConnectionString = myConnectionString;
IMyService myService = container.Resolve<IMyService>(); // error here

最佳答案

Autofac and ASP .Net MVC 4 Web API

上面的线程是相关的。它没有回答问题,但它帮助我开始朝着正确的方向进行故障排除。解决方案在这里:

我删除了这两行:

builder.RegisterType<MyContext>().As<IMyContext>().InstancePerLifetimeScope();
builder.RegisterType<DbContext>(); // is this necessary??

并用这个替换它们:

builder.RegisterType<MyContext>().InstancePerLifetimeScope();

关于c# - Autofac 无法解析 DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36926390/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com