0
Autofac.Extras.Multitenancyパッケージがインターフェイスの2つの実装のどちらかを選択するのに苦労しています。Autofac Web ApiマルチテナントがHTTPContext.Currentを取得しない
私はテナントIDに基づいて別々のデータベースに接続しようとしていますが、ITenantIdentificationStrategy
は私がAutofacの例から取得したものではありません。HttpContext.Current
が設定されていないため、HTTP呼び出しから何も取得できません。私はこのような2つの構成を持っています。
var mtc = new MultitenantContainer(tenantIdStrategy, builder.Build());
mtc.ConfigureTenant(Guid.Parse("00000000-0000-0000-0000-000000000001"), b => b.RegisterInstance<DatabaseConnection>(connectionOne).As<IDatabaseConnection>().SingleInstance());
mtc.ConfigureTenant(Guid.Parse("00000000-0000-0000-0000-000000000002"), b => b.RegisterInstance<DatabaseConnection>(connectionTwo).As<IDatabaseConnection>().SingleInstance());
var resolver = new AutofacWebApiDependencyResolver(mtc);
config.DependencyResolver = resolver;
appBuilder.UseWebApi(config);
だから、それぞれ、私はインスタンス2つのデータベース接続を持っていると私はそれらのインスタンスは、各テナントのために使用したい
私のテナントIdが、私は単純なコントローラを追加
public class RequestParameterStrategy : ITenantIdentificationStrategy
{
public bool TryIdentifyTenant(out object tenantId)
{
tenantId = null;
try
{
var context = HttpContext.Current;
if (context != null && context.Request != null)
{
tenantId = HttpContext.Current.Request.RequestContext.RouteData.Values["tenantId"];
}
}
catch (HttpException)
{
// Happens at app startup in IIS 7.0
}
return tenantId != null;
}
}
非常に単純ですこれはASP.NETパイプライン内にあるはずです。
public IHttpActionResult Get(IMongoDBAdapter adapter, string memberId= null) {
return Ok()
}
これは、Autofacのウェブサイトの例です。しかしHttpContext.Currentは常にnullで、テナントIDが設定されていないし、それは私のコントローラのは 私は私の問題は、このプロジェクトがIISでホストされていないことかもしれないと思うDatabaseConnection
EDITを取得していないことを不平を言います。それは自己ホストされたWindowsサービスであり、コントローラHttpContext.Currentでさえもnullです。このアイデアのように思えますが、自己ホスト型サービスでは不可能かもしれませんか?
あなたが正しい
障害の発生しているオブジェクトをいつ解決するのですか? (質問の本文を更新してください。)リクエストに含まれていない場合(ASP.NETパイプラインでHttpContext.Currentがまだ設定されていないなど)、できることはあまりありません。そのドキュメンテーションの例は単なる例に過ぎず、スティックを振るよりも多くの免責事項があります。独自の例外的なケースを処理するために、個人的なニーズにいくつかの修正を加えなければならない場合があります。 –
[混乱を避けるために_even more disclaimers_でドキュメントを更新しました。](http://autofac.readthedocs.io/en/latest/advanced/multitenant.html) –
@TravisIlligは、返信とドキュメントの更新に感謝します。しかし、私が言及しなかった大きな部分は、これがWindowsサービスでホストされているということでした。 IIS経由ではありません。それはHttpContext.Currentは常にnullになるようです...バマー.... – ThrowsException