C# Autofac无法解析DbContext
我从Autofac收到此错误消息;: 在类型“MyService`1[MyContext]”上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的构造函数都不能使用可用的服务和参数调用: 无法解析构造函数“Void.ctor(MyContext)”的参数“MyContext context” 错误发生在这一行代码上(也显示在下面的代码中): 事实上,当我注册任何具体类型时,它都能工作。。。让我相信我没有注册什么东西。我的问题是我没有注册什么?错误消息似乎将MyContext命名为罪魁祸首,但很明显,我正在注册它,如下所示。C# Autofac无法解析DbContext,c#,autofac,C#,Autofac,我从Autofac收到此错误消息;: 在类型“MyService`1[MyContext]”上使用“Autofac.Core.Activators.Reflection.DefaultConstructorFinder”找到的构造函数都不能使用可用的服务和参数调用: 无法解析构造函数“Void.ctor(MyContext)”的参数“MyContext context” 错误发生在这一行代码上(也显示在下面的代码中): 事实上,当我注册任何具体类型时,它都能工作。。。让我相信我没有注册什么东西。
我真的不想用AnyConcreteType。。。因为我只想明确地注册我所需要的类 我的服务结构如下:
public class MyService<T> : BaseService<T>, IMyService where T:DbContext,IMyContext
{
public MyService(T context) : base(context)
{
}
}
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??
builder.RegisterType().As();
builder.RegisterType().As().SingleInstance();
builder.RegisterType();
builder.RegisterType();//这有必要吗??
我这样称呼它:
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
INamedConnectionString namedConnectionString = container.Resolve<INamedConnectionString>();
namedConnectionString.ConnectionString = myConnectionString;
IMyService myService = container.Resolve<IMyService>(); // error here
var container=builder.Build();
SetResolver(新的AutofacDependencyResolver(容器));
INamedConnectionString namedConnectionString=container.Resolve();
namedConnectionString.ConnectionString=myConnectionString;
IMyService myService=container.Resolve();//这里出错
上述线程是相关的。它没有回答这个问题,但它帮助我开始朝着正确的方向进行故障排除。解决方案如下:
我删除了这两行:
builder.RegisterType<MyContext>().As<IMyContext>().InstancePerLifetimeScope();
builder.RegisterType<DbContext>(); // is this necessary??
builder.RegisterType();
builder.RegisterType();//这有必要吗??
并将其替换为以下内容:
builder.RegisterType<MyContext>().InstancePerLifetimeScope();
builder.RegisterType();
这对我很有效
builder.RegisterType()
通过使用
builder.RegisterType().InstancePerLifetimeScope()实现此功能代码>
背景:
我有一个DBContext类,我有注入上下文的服务,然后有控制器来调用服务(接口)
然后在global.asax上调用builder.RegisterType().InstancePerLifetimeScope()代码>。这很有效,自从我再次参与MVC项目以来已经有一段时间了
如果有人对此有问题,您可以再次参考
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
INamedConnectionString namedConnectionString = container.Resolve<INamedConnectionString>();
namedConnectionString.ConnectionString = myConnectionString;
IMyService myService = container.Resolve<IMyService>(); // error here
builder.RegisterType<MyContext>().As<IMyContext>().InstancePerLifetimeScope();
builder.RegisterType<DbContext>(); // is this necessary??
builder.RegisterType<MyContext>().InstancePerLifetimeScope();