如何解决用ria域服务标准asp.net Web应用程序注入
| 我想将DI(Ninject)与位于标准asp.net Web服务器上的RIA Web服务一起使用。 我应该如何连接包含数据存储的存储库? 我添加了一个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>();
}
}
看来我只是缺少一种获取应用程序对象的方法,然后它将起作用,或者?
解决方法
我本身没有RIA Web服务的经验,但是在快速浏览文档之后,我建议您执行以下操作。为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;
}
}
希望这会有所帮助,因为我自己还没有尝试过该解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。