大多數在線示例處理asp.net並將它們的DbContext註冊爲其啓動服務註冊表的一部分。如何在存儲庫中注入EntityFramework核心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
細節--->沒有與標籤匹配的「AutofacWebRequest」範圍 從其中要求實例的範圍可見。如果你的web應用程序的執行過程中看到這一點,它通常表示正被SingleInstance要求註冊爲每個HTTP請求的組件()
我應該在這一點上手動解決一個新的DbContext?或者,也許我應該改變我的回購的生命週期?
Edit2:看起來我仍然得到這個錯誤,即使在刪除整個Quartz作業註冊。
你試試將您的上下文註冊爲builder.RegisterType().InstancePerRequest(); –
你爲什麼不把你的DbContext添加到'Startup.cs'中的'ConfigureServices'方法?類似於'services.AddDbContext(options => options.UseSqlServer(Configuration.GetConnectionString(「DefaultConnection」)));'然後添加你的Repository:'services.AddScoped ();' –
kimbaudi
沒有'Startup.cs'因爲我不在asp.net上下文中。這是在MicrosoftBot框架應用程序中。我會在原始問題中澄清。 – martinni39