我想将DI(Ninject)与我的RIA webservices一起使用,该服务位于标准的asp.net网络服务器上。
我应该如何连接包含数据存储区的存储库?
我添加了一个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>();
}
}
似乎我只是错过了获取应用程序对象的方法然后它可以工作,或者?
答案 0 :(得分: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);
}
确保使用内核注册域服务和任何依赖项。应该在PersonService的构造函数中注入IPersonRepository。
[EnableClientAccess]
public class PersonService : DomainService
{
private readonly IPersonRepository _personRepository;
public PersonService(IPersonRepository personRepository)
{
_personRepository = personRepository;
}
}
希望这会有所帮助,因为我自己没有尝试过这个解决方案。