2011-05-25 22 views
0

我想使用DI(Ninject)與我的RIA webservices位於標準的asp.net web服務器上。Ninject與ria domainservice標準的asp.net webapplication

我應該如何連接包含數據存儲的存儲庫?

我添加了一個Global.asax文件:

public class Global : NinjectHttpApplication 
{ 
    protected override Ninject.IKernel CreateKernel() 
    { 
     IKernel kernel = new StandardKernel(); 
     kernel.Bind<IPersonRepository>().To<PersonRepository>(); 
     Application.Add("Kernel", kernel); 
     return kernel; 
    } 

這裏的地方,我想它掛起來,......但我堅持

[EnableClientAccess] 
public class PersonService : DomainService 
{ 
    IPersonRepository _personRepository;   

    public PersonService() 
    {  
      _personRepository = ????....kernel.Get<IPersonRepository>(); 

    } 
} 

看來,我只是缺少一種方法來獲取應用程序對象,然後它會工作,或?

回答

1

我沒有RIA Web Services本身的經驗,但在對文檔進行快速掃描後,我會建議您執行以下操作。爲Ninject創建IDomainServiceFactory的實現。

public class NinjectDomainServiceFactory : IDomainServiceFactory 
{ 
    private readonly IKernel _kernel; 

    public NinjectDomainServiceFactory(IKernel kernel) 
    { 
     _kernel = kernel; 
    } 

    public DomainService CreateDomainService(
     Type domainServiceType, DomainServiceContext context) 
    { 
     var service = _kernel.Get(domainServiceType); 
     service.Initialize(context); 

     return service; 
    } 

    public void ReleaseDomainService(DomainService domainService) 
    { 
     domainService.Dispose(); 
    } 

} 

在Application_Start中將自定義域服務工廠與DomainService類註冊。

public void Application_Start(object sender, EventArgs e) 
{ 
    var kernel = CreateKernel(); 
    DomainService.Factory = new NinjectDomainServiceFactory(kernel); 
} 

確保您註冊了您的域服務和任何與內核的依賴關係。 IPersonRepository應該注入PersonService的構造函數中。

[EnableClientAccess] 
public class PersonService : DomainService 
{ 
    private readonly IPersonRepository _personRepository;   

    public PersonService(IPersonRepository personRepository) 
    { 
     _personRepository = personRepository; 
    } 
} 

希望這會有幫助,因爲我沒有嘗試過自己的解決方案。

相關問題