4

例のほとんどは、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ジョブ登録全体を削除してもこのエラーが発生しているようです。

+0

を解決しましたコンテキストをbuilder.RegisterTypeとして登録してください。().InstancePerRequest(); –

+0

DbContextを 'Startup.cs'の' ConfigureServices'メソッドに追加してみませんか? 'services.AddDbContextのようなもの(options => options.UseSqlServer(Configuration.GetConnectionString(" DefaultConnection ")));そしてあなたのリポジトリもそこに追加してください:' services.AddScoped (); ' – kimbaudi

+0

I私はasp.netコンテキストではないので、 'Startup.cs'を持っていません。これはMicrosoftBot Frameworkアプリケーションに含まれています。私は元の質問で明らかにする。 – martinni39

答えて

1

私は問題について間違っていました。IoCとDbContextの問題ではありませんでした。それは、リダイレクトを追加する.NETプラットフォーム自体に

https://github.com/dotnet/corefx/issues/9846#issuecomment-274707732

だったように思えるあなたはにしてみてくださいでしたトリックSystem.Net.Http 4.3.1をインストール

<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> 
関連する問題