【发布时间】:2017-06-29 09:05:12
【问题描述】:
我创建了简单的 WCF Rest 服务:
[ServiceContract]
public interface IReadData
{
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "GetHealthStatus")]
string GetHealthStatus();
}
还有:
public class ReadData : IReadData
{
private IFacadeToRepo repository;
public ReadData(IFacadeToRepo connectorToRepo)
{
this.repository = connectorToRepo;
}
public string GetHealthStatus()
{
return "ok";
}
}
接下来我创建了“映射器”:
class NinjectBindings: NinjectModule
{
public override void Load()
{
Bind<IReadData>().To<ReadData>();
Bind<IFacadeToRepo>().To<RepositoryApi>();
}
}
最后我创建了 ServiceBase:
public partial class MyRestWCFRestWinSer : ServiceBase
{
ServiceHost readDataServiceHost = null;
private StandardKernel kernel;
public MyRestWCFRestWinSer()
{
kernel = new StandardKernel();
kernel.Load(Assembly.GetExecutingAssembly());
InitializeComponent();
}
public void OnDebug()
{
OnStart(null);
}
protected override void OnStart(string[] args)
{
readDataServiceHost = new ServiceHost(kernel.Get<IReadData>());
readDataServiceHost.Open();
}
protected override void OnStop()
{
if (readDataServiceHost != null)
{
readDataServiceHost.Close();
readDataServiceHost = null;
}
}
}
所以我认为现在 ninject 应该解析 IReadData 并创建新的 ReadData 巫婆默认 IFacadeToRepo。但它不起作用。通过 installutil 安装 windows 服务并运行过程后 -> 我收到“服务正在启动。服务无法启动。服务未报告错误。”
您能帮我与 ninjects 一起运行这些 Web 服务吗?
编辑。看起来它有问题:
kernel.Get<IReadData>()
将其替换为:
typeof(ReadData)
并将默认的空构造函数添加到 ReadData - 它可以工作
我通过逐行添加进行了一些测试。
【问题讨论】:
-
我一直在寻找一个不围绕在 IIS 中托管的解决方案,我可以在其中使用带有 TopShelf 的 Windows 服务进行托管,这解决了我的问题 - 希望我能多次投票
标签: wcf ninject self-hosting