大多数在线示例处理asp.net并将其DbContext注册为其启动服务注册表的一部分。
我尝试像这样注册我的DbContext
builder.RegisterType<MyContext>()
.As<MyContext>()
.InstancePerLifetimeScope();
builder.RegisterType<DealRepository>()
.Keyed<IRepository<Deal>>(FiberModule.Key_DoNotSerialize)
.As<IRepository<Deal>>()
.SingleInstance();
builder.RegisterType<CardsDialog>()
.As<IDialog<object>>()
.InstancePerDependency();
但是我收到了这个错误
类型违反的继承安全规则: 'System.Net.Http.WebRequestHandler'。派生类型必须匹配 基本类型的安全可访问性或不太容易访问。
实际MessageController.cs
在Post
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, activity))
{
var dialog = scope.Resolve<IDialog<object>>();
await Conversation.SendAsync(activity, () => dialog);
}
如何进行注册?
编辑:
如建议的那样,使用InstancePerRequest
解决了这个问题。但我也有一个Quartz作业,每X秒运行一次,也需要一个存储库。
builder.RegisterType<DealJob>()
.AsSelf()
.SingleInstance();
无法解析“BargainBot.Repositories.MyContext”类型,因为 它所属的生命范围无法定位。下列 此注册公开了服务: - BargainBot.Repositories.MyContext
详情---&gt;没有标记与“AutofacWebRequest”匹配的范围 从请求实例的范围中可见。如果您在执行Web应用程序期间看到此情况,则通常表示SingleInstance()
正在请求按HTTP请求注册的组件
此时我是否应手动解析新的DbContext?或者也许我应该改变我的回购生命周期?
Edit2:看起来即使删除整个Quartz作业注册,我仍然会收到此错误。
答案 0 :(得分:1)
我对这个问题错了,它不是IoC和DbContext问题。看起来好像是在.NET平台本身
https://github.com/dotnet/corefx/issues/9846#issuecomment-274707732
添加重定向功能
<dependentAssembly>
<assemblyIdentity name="System.ComponentModel.TypeConverter" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.0.0" />
</dependentAssembly>
答案 1 :(得分:0)
安装System.Net.Http 4.3.1解决了我的问题
答案 2 :(得分:0)
我遇到了类似的问题,经过大量的来回后,以下代码对我有用:
<强>的DbContext 强>
RewriteEngine On
RewriteBase /forum/
RewriteCond %{THE_REQUEST} /public/([^\s?]*) [NC]
RewriteRule ^ %1 [L,NE,R=302]
RewriteRule ^((?!public/).*)$ public/$1 [L,NC]
<强>存储库强>
public class SalesDbContext : DbContext
{
public SalesDbContext(DbContextOptions<SalesDbContext> options) : base(options)
{
}
public DbSet<Domain.Product.Product> Products { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
// Configure database attributes
}
}
Autofac模块
public class ProductRepository : IProductRepository
{
private readonly SalesDbContext _db;
public ProductRepository(SalesDbContext db)
{
_db = db;
}
}