首先,我从未见过将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的经验。
答案 0 :(得分:8)
答案 1 :(得分:5)
使用自定义IInstanceProvider
来解析您的服务实例。这是一个例子:
http://orand.blogspot.com/2006/10/wcf-service-dependency-injection.html
答案 2 :(得分:1)
SO的answer提供了将NInject添加到WCF项目的完整实现。
我不会在此处复制并粘贴它,但基本上,在通过Nuget安装Ninject
,Ninject.Extensions.Wcf
和Ninject.Web.Common
扩展程序后,您必须创建三个班级:
public class NInjectInstanceProvider : IInstanceProvider, IContractBehavior
public class NInjectServiceHostFactory : ServiceHostFactory
public class NInjectServiceHost : ServiceHost
然后在.svc中指向Factory
属性(右键单击解决方案资源管理器中的文件,然后选择&#34;查看标记&#34;)到NInjectServiceHost
类:
<%@ ServiceHost ... Factory="SomeNamespace.NInjectServiceHostFactory" %>