私はマルチテナントアプリケーションのためのsaaskitマルチテナントプロジェクトを使用しています。InvalidOperationException:タイプ
私はテナントコンテキストを作成でき、すべてのコントローラにアクセスできます。
しかし、時にはそれが
未処理の例外が発生したエラー、次の私を与える: 型「LMS.Model.AppTenant」のサービスを解決できません 「LMS.Controllers.OrganizationController」をアクティブにしようとしたとき。
このエラーは、コントローラと実行されたアクションメソッドでランダムに発生します。エラーの性質は、コントローラ/アクションメソッドに固有のものではありません。私は私のコードを見ることができます
は、実際にテナントを返すんどの成功しTenantResolverに入るが、それはDIが私のコントローラにそれを注入するために来るときには、このエラーは私のアプリケーションが完全に停止が発生した後にエラーが
を記載されていると文句を言います白い画面が表示されます。
この問題は、本番サーバーで発生し、localhostでは発生しません。
これに関する助け!この
public class HomeController
{
public HomeController(TenantContext<AppTenant> tenantContext)
{
}
}
と以下のように、すべてのコントローラに注入
テナントはtenantContextが、注射
public static class MultitenancyServiceCollectionExtensions
{
public static IServiceCollection AddMultitenancy<TTenant, TResolver>(this IServiceCollection services)
where TResolver : class, ITenantResolver<TTenant>
where TTenant : class
{
Ensure.Argument.NotNull(services, nameof(services));
services.AddScoped<ITenantResolver<TTenant>, TResolver>();
// Make Tenant and TenantContext injectable
services.AddScoped(prov =>
prov.GetService<IHttpContextAccessor>()?.HttpContext?.GetTenant<TTenant>());
services.AddScoped(prov =>
prov.GetService<IHttpContextAccessor>()?.HttpContext?.GetTenantContext<TTenant>());
// Ensure caching is available for caching resolvers
services.AddMemoryCache();
return services;
}
}
この感謝の任意のヘルプ作られているため拡張クラスです!
私の質問は何ですか?なぜそれがnullになっていますか?初期化されていないテナントインスタンス(デフォルトのテナント)を提案したように、その部分が処理される無効なURL /テナント名を入力すると、だから、私はSingleton OR Transientを登録する必要がありますか? – Rohit
シングルトンではなく、有効期間内のジョブです。しかし、あなたが投稿したコードを見ると、古いバージョンのSaaskitを使用しているようです。コードは1.1.3以降です。 1.1.4からのコードは少し違って見えるhttps://github.com/saaskit/saaskit/blob/1.1.4/src/SaasKit.Multitenancy/MultitenancyServiceCollectionExtensions.cs – Tseng
Okがチェックします!また、私は 'AppTenantResolver'クラスのSessionに' TenanContext'を設定しているので、テナントを何度も解決する必要はありません。しかし、このセッション値は、実行されたアクションメソッドに対してnullになることがあります。 'context.Session.SetObjectAsJson(" TenantContext "、tenantContext);'なぜこのHttpContextセッションがnullになるのですか?このため私はテナントのコンテキストを取得することができません – Rohit