Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ninject与ria domainservice标准asp.net Web应用程序_Asp.net_Dependency Injection_Ninject_Ria - Fatal编程技术网

Ninject与ria domainservice标准asp.net Web应用程序

Ninject与ria domainservice标准asp.net Web应用程序,asp.net,dependency-injection,ninject,ria,Asp.net,Dependency Injection,Ninject,Ria,我想将DI(Ninject)与位于标准asp.net Web服务器上的RIA Web服务一起使用 我应该如何连接包含数据存储的存储库 我添加了一个Global.asax文件: public class Global : NinjectHttpApplication { protected override Ninject.IKernel CreateKernel() { IKernel kernel = new StandardKernel();

我想将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;
    }
公共类全局:NinjectHttpApplication
{
受保护的重写Ninject.IKernel CreateKernel()
{
IKernel kernel=新的标准内核();
kernel.Bind().To();
添加(“内核”,内核);
返回内核;
}
这是我想把它挂起来的地方,但我被卡住了

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

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

    }
}
[EnableClientAccess]
公共类PersonService:DomainService
{
IPersonRepository_personRepository;
公共人员服务()
{    
_personRepository=??……kernel.Get();
}
}

似乎我只是缺少了一种方法来获取应用程序对象,然后它就会工作,或者?

我没有RIA Web服务本身的经验,但是在快速浏览文档之后,我建议执行以下操作。创建for Ninject的实现

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中的类注册自定义域服务工厂

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;
    }
}
希望这会有帮助,因为我自己还没有尝试过这个解决方案