うまくいけば、これは簡単です。私はこれが可能かどうか疑問に思います。おそらくそうではありません。私はWCFサービスを自己ホストしようとしています(下の私の例ではコンソールアプリケーションです)。サービスにはデフォルトのコンストラクタがありません。単一のパラメータシグネチャコンストラクタのみを含みます。ユーザーセッションを処理できるようにするには、サービスが必要です。現在、Ninject DIを使用しています。ここで私の問題を説明するために思いついた簡単なコードの解決策です:セルフホスト(IISまたはWASなし)パラメータが必要なサービスを持つWCF
using System;
using System.ServiceModel;
using System.ServiceModel.Web;
using Ninject.Modules;
namespace ConsoleApplication1
{
public class Program
{
static void Main()
{
using (var webServiceHost = new WebServiceHost(typeof(MyWcf)))
{
var webHttpBinding = new WebHttpBinding();
var uri = new Uri("http://localhost:8000/");
webServiceHost.AddServiceEndpoint(typeof(IMyWcf), webHttpBinding, uri);
webServiceHost.Open();
Console.WriteLine("Service is ready...");
Console.ReadKey();
}
}
}
[ServiceContract]
public interface IMyWcf
{
[OperationContract, WebGet(UriTemplate = "")]
string HelloWorld();
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)]
public class MyWcf : IMyWcf
{
private readonly IMessage _customMessage = new Message("Default Message.");
public MyWcf(IMessage message)
{
_customMessage = message;
}
public string HelloWorld()
{
return _customMessage.Text;
}
}
public interface IMessage
{
string Text { get; }
}
public class Message : IMessage
{
public Message (string message)
{
Text = message;
}
public string Text { get; set; }
}
public class NinjectSetup : NinjectModule
{
public override void Load()
{
Bind<IMessage>().To<Message>()
.WithConstructorArgument("message", "Injected String Message.");
}
}
}
明らかに、パラメータ化されたコンストラクタをコメントアウトすると、サービスが実行できます。しかし、それは私には良いことではありません。私はServiceHostFactoryを使いたくないと思うので、明らかに.svc/IISを持っている必要があるからです。これを回避する方法はありますか? WebServiceHost
を継承する新しいMyWebServiceHost
を作成し、そのサービスのインスタンスを作成するいくつかのメソッドをオーバーライドできますか?
Ninject.Extensions.wcfの例を見ましたか?自己ホストの例がこれをしていることを確かめてください。 –
リンクすることができますか?私が見つけたすべての例では、IISでホストされており、ServiceHostFactoryまたはServiceBehaviorを使用しています。 – ymerej
例題に2つあります。 1つは自己ホストまたはsometthing(Ninject.Extensions.Wcfリポジトリのgithubにあるすべてのobv) –