例のほとんどは、asp.netを使用してDbContextをスタートアップサービスレジストリの一部として登録しています。EntityFrameworkコア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();
ように私のDbContextを登録しようとしたしかし、私はこのエラーをタイプ別に違反し
継承セキュリティルール取得しています: 'System.Net.Http.WebRequestHandler' を。派生型は、基本型のセキュリティアクセシビリティに一致するか、アクセシビリティが低いものでなければなりません( )。
実際のMessageController.cs
は、登録が行われる必要がありますどのように
using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, activity))
{
var dialog = scope.Resolve<IDialog<object>>();
await Conversation.SendAsync(activity,() => dialog);
}
Post
に新しいスコープを作成してそれがさらに複雑ですか?
編集: 提案したように、InstancePerRequest
を使用して問題を解決しました。しかし私はまた、Quartzジョブを実行して、X秒ごとに実行するリポジトリも必要とします。
builder.RegisterType<DealJob>()
.AsSelf()
.SingleInstance();
それがで所属 寿命の範囲が配置できないため、型「BargainBot.Repositories.MyContext」を解決することができません。以下 サービスはこの登録によって露出される: - BargainBot.Repositories.MyContext
詳細--->タグマッチングとはスコープ「AutofacWebRequestは」 インスタンスが要求された範囲から見えません。あなたは、Webアプリケーションの実行中にこれを見た場合、それは一般ごとのHTTPリクエストとして登録コンポーネントがSingleInstanceによって要求されていることを示している()
私は、この時点で手動で新しいDbContextを解決する必要があります ?あるいは、私のレポのライフサイクルを変更する必要がありますか?
Edit2:Quartzジョブ登録全体を削除してもこのエラーが発生しているようです。
を解決しましたコンテキストをbuilder.RegisterTypeとして登録してください。().InstancePerRequest(); –
DbContextを 'Startup.cs'の' ConfigureServices'メソッドに追加してみませんか? 'services.AddDbContextのようなもの(options => options.UseSqlServer(Configuration.GetConnectionString(" DefaultConnection ")));そしてあなたのリポジトリもそこに追加してください:' services.AddScoped (); ' –
kimbaudi
I私はasp.netコンテキストではないので、 'Startup.cs'を持っていません。これはMicrosoftBot Frameworkアプリケーションに含まれています。私は元の質問で明らかにする。 – martinni39