带有ninject示例的WCF

时间:2011-07-12 19:32:51

标签: wcf ninject

首先,我从未见过将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 个答案:

答案 0 :(得分:8)

答案 1 :(得分:5)

使用自定义IInstanceProvider来解析您的服务实例。这是一个例子:

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

答案 2 :(得分:1)

SO的answer提供了将NInject添加到WCF项目的完整实现。

我不会在此处复制并粘贴它,但基本上,在通过Nuget安装NinjectNinject.Extensions.WcfNinject.Web.Common扩展程序后,您必须创建三个班级:

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

然后在.svc中指向Factory属性(右键单击解决方案资源管理器中的文件,然后选择&#34;查看标记&#34;)到NInjectServiceHost类:

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