1

この3つをうまく連携させることができないようです。

1 つの方法で非常に単純なサービスに絞り込みました。

[System.ServiceModel.ServiceContract]
public interface Icontract
{
    [System.ServiceModel.OperationContract]
    void Ping();
}

public class contract : Icontract
{
    public void Ping()
    { }
}

次のような工場があります。

public class ServiceFactory
{
    private readonly IKernel _kernel;

    public ServiceFactory(IKernel kernel)
    {
        _kernel = kernel;
    }

    public NinjectServiceHost<T> GetService<T>()
    {
        return _kernel.Get<NinjectServiceHost<T>>();
    }
}

このようにサービスを作成すると...

_tmp = new ServiceHost(typeof(ConsoleApplication1.contract));
_tmp.Open();

...ディスカバリーは問題なく機能します。しかし、工場をそのように使用すると...

_tmp = _factory.GetService<ConsoleApplication1.contract>();
_tmp.Open();

...サービスはもう検出できません。サービスに関する他のすべては期待どおりに機能します。

ディスカバリーがこのように機能することを喜んだ人はいますか、それとも私が間違っていることはありますか?

4

2 に答える 2

-1

バインディングはどこで設定していますか? コードのどこかで、次kernelServiceModuleように初期化する必要があります。

_kernel = new StandardKernel(new YourNinjectModule());

そして、モジュールコードで:

public class YourNinjectModule: NinjectModule
{
    /// <summary>
    /// Loads the module into the kernel.
    /// </summary>
    public override void Load()
    {
        // ===========================================================
        //
        // Bind dependency injection.
        // Add entries in here for any new services or repositories.
        //
        // ===========================================================

        this.Bind<Icontract>().To<contract>();
    }
}
于 2012-07-05T18:20:23.240 に答える