WCF с примером ниндзя - PullRequest
5 голосов
/ 12 июля 2011

Прежде всего, я никогда не видел пример использования ninject с wcf.

Это мой .svc:

<%@ ServiceHost Language="C#" Debug="true" Service="MyService.Services.NotifyService" %>

Мой сервис:

[ServiceContract]
public interface INotifyService
{
    [OperationContract]
    void SendEmail(string to, string from, string message);
}

class NotifyService : INotifyService
{
    private IEmailRepository emailRepo;

    public NotifyService(IEmailRepository emailRepo)
    {
        if (emailRepo== null) throw new ArgumentNullException("emailRepo");
        this.emailRepo= emailRepo;
    }
    public void SendEmail(string to, string from, string message)
    {
        //do stuff here
    }
}

Используя эту информацию, как мне добавить зависимости MyEmailRepository в NotifyService?

Если у меня нет конструктора по умолчанию, wcf выдает ошибку, запрашивая ее.У меня также есть опыт использования ninject с asp.net mvc3, если это поможет.

Ответы [ 3 ]

8 голосов
/ 13 июля 2011
5 голосов
/ 12 июля 2011

Используйте пользовательский IInstanceProvider для разрешения вашего экземпляра службы. Вот пример:

http://orand.blogspot.com/2006/10/wcf-service-dependency-injection.html

1 голос
/ 10 ноября 2015

Этот ответ в SO обеспечивает полную реализацию для добавления NInject в проект WCF.

Я не буду копировать и вставлять его здесь, но, по сути, после установки расширений Ninject, Ninject.Extensions.Wcf и Ninject.Web.Common через Nuget вам придется создать три класса:

public class NInjectInstanceProvider : IInstanceProvider, IContractBehavior
public class NInjectServiceHostFactory : ServiceHostFactory
public class NInjectServiceHost : ServiceHost

Затем укажите атрибут Factory в вашем .svc (щелкните правой кнопкой мыши файл в обозревателе решений, затем выберите «Просмотреть разметку») на класс NInjectServiceHost:

<%@ ServiceHost ... Factory="SomeNamespace.NInjectServiceHostFactory" %>
...