Ninject с помощью стандартного веб-приложения asp.net - PullRequest
0 голосов
/ 25 мая 2011

Я хотел бы использовать DI (Ninject) с моими веб-сервисами RIA, расположенными на стандартном веб-сервере 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>();

    }
}

Кажется, чтоМне только не хватает способа получить объект приложения, и тогда он будет работать, или?

1 Ответ

1 голос
/ 27 мая 2011

У меня нет опыта работы с RIA Web Services как таковой, но после быстрого сканирования документации я бы предложил сделать следующее. Создайте реализацию IDomainServiceFactory для 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();
    }

}

Зарегистрируйте фабрику пользовательских доменных служб с помощью класса DomainService в Application_Start.

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

Убедитесь, что вы зарегистрировали свои доменные службы и все зависимости в ядре. Репозиторий IPerson должен быть вставлен в конструктор PersonService.

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

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

Надеюсь, это будет полезно, так как я сам не пробовал решение.

...