2011-06-11 30 views
1

我有一個API公開曝光,並有一個沙箱。我已經在ResourceFactory中編寫了一些代碼,所以api.sandbox.whatever /什麼都可以工作,而且在論據中也是sandbox = true,但是這種感覺就像一個巨大的黑客。任何更好的方法來做到這一點?Wcf Web API沙箱端點處理

這裏是我的代碼:

public class NinjectResourceFactory : IResourceFactory 
{ 
    private readonly IKernel _productionKernel; 
    private readonly IKernel _sandboxKernel; 

    public NinjectResourceFactory() 
    { 
     _productionKernel = new StandardKernel(new QueryMasterModule()); 
     _sandboxKernel = new StandardKernel(new QueryMasterModule(true)); 
    } 

    public object GetInstance(Type serviceType, InstanceContext instanceContext, HttpRequestMessage request) 
    {       
     string uri = request.RequestUri.ToString(); 
     if (uri.Contains(".sandbox.")) 
     { 
      return _sandboxKernel.Get(serviceType); 
     } 
     else if (uri.Contains("sandbox=true")) 
     { 
      request.RequestUri = new Uri(uri.Replace("sandbox=true", "")); 
      return _sandboxKernel.Get(serviceType); 
     } 
     else 
     { 
      return _productionKernel.Get(serviceType);  
     }    
    } 

    public void ReleaseInstance(InstanceContext instanceContext, object service) 
    { 
     // todo do I need to implement this? 
    } 
} 

回答

0

如果它應該是一個真正的沙箱,那麼你不想兩個站點在同一進程中運行。我會部署兩個網站,並讓IIS根據主機名決定哪一個。這樣沙箱將與生產隔離,這是沙箱的目的。