2017-06-28 7 views
0

マルチファインダ用Autofac.MultitenantパッケージのIoCコンテナとしてAutofacを使用しています。Autofac Multi-Tenant ASP.NETアプリケーション

var builder = new ContainerBuilder(); 

// Register the controllers  
builder.RegisterControllers(typeof(Deskful.Web.DeskfulApplication).Assembly); 

// Tenant Identifier 
var tenantIdentifier = new RequestSubdomainStrategy(); 

builder.RegisterInstance(tenantIdentifier).As<ITenantIdentificationStrategy>(); 

// Build container 
var container = builder.Build(); 

// Tenant container 
var mtc = new MultitenantContainer(tenantIdentifier, container); 

// Set autofac as dependency resolver 
DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 

そして、私の識別戦略::私はITenantIdentificationStrategyを注入した後、次の操作を行うことができテナントを必要とする私のコントローラで次に

public class RequestSubdomainStrategy : ITenantIdentificationStrategy 
{ 
    public bool TryIdentifyTenant(out object tenantId) 
    { 
     tenantId = null; 

     try 
     { 
      var context = HttpContext.Current; 
      if (context != null && context.Request != null) 
      { 
       var site = context.Request.Url.Host; 

       tenantId = 1; 
      } 
     } 
     catch { } 

     return tenantId != null; 
    } 
} 

私は、コンテナ、このようなセットアップを持っています:

var tenantId = this.TenantIdStrategy.IdentifyTenant<int>(); 

私の質問は、テナントオブジェクトdテナントのすべてのプロパティにアクセスできるように、私の識別プロセスを守っていますか?

これでidだけが返されるようになりました。

答えて

0

これが正しい解決策であるかどうかわかりませんが、次のようにして終了しました。

まず私は、現在のITenantIdentificationStrategyを拡張する新しいインターフェイスを作成しました:

public interface IDeskfulTenantIdentificationStrategy : ITenantIdentificationStrategy 
{ 
    ITenant Tenant { get; } 
} 

私はテナントプロパティとのインターフェイスを拡張しました。

はその後、私の識別子クラスで私は、識別時にテナントプロパティを設定します。

public class RequestSubdomainStrategy : IDeskfulTenantIdentificationStrategy 
{ 
    private ITenant _tenant; 

    public ITenant Tenant 
    { 
     get 
     { 
      return _tenant; 
     } 
     private set 
     { 
      _tenant = value; 
     } 
    } 

    public bool TryIdentifyTenant(out object tenantId) 
    { 
     tenantId = null; 

     try 
     { 
      var context = HttpContext.Current; 
      if (context != null && context.Request != null) 
      { 
       var site = context.Request.Url.Host; 

       Tenant = new Tenant("tenant1.deskfull.be", "connString", "Tenant 1") { Id = 20 }; 

       tenantId = Tenant.Id; 
      } 
     } 
     catch { } 

     return tenantId != null; 
    } 
} 

そして最後に、私は私のautofacコンテナに新しいintefaceを登録します。私はその後、私の内部でこれを使用すると

var tenantIdentifier = new RequestSubdomainStrategy(); 

builder.RegisterInstance(tenantIdentifier) 
.As<IDeskfulTenantIdentificationStrategy>(); 

をコントローラ、私は以下を行うことができます:

public string Index() 
{ 
    int tenantId = TenantIdStrategy.IdentifyTenant<int>(); 

    return "Home - Index: " + TenantIdStrategy.Tenant.TenantName; 
} 
関連する問題