2011-12-09 20 views
2

wcf拡張機能とdynamicproxy2拡張機能を使用した傍受を使用して、wcfでninjectを動作させようとしています。私は基本的にTimeアトリビュートを作成し、それをすべて基本的なシナリオで作業させました。WCFと傍受を伴うNinject(AOP用)

Bind<IMyDependency>().To<MyDependency>(); 
Bind<IService1>().To<Service1>().WithConstructorArgument("dependency", Kernel.Get<IMyDependency>()); 

すべてが正常に動作しますが、時間が私のサービス1またはMyDependencyで何かに文句を言わない火属性:私はトラブルを取得するところninjectモジュールで、私は私のサービスは、コンストラクタの引数でバインディングを作成するときです。

time属性は、インターネット上に浮かぶ標準的な属性です。コードの唯一の他の作品は本当にCreateKernel方法でこのようになりますこれ、Global.asaxのである:任意の助け

protected override IKernel CreateKernel() { 
    IKernel kernel = new StandardKernel(
     new NinjectSettings() { LoadExtensions = false }, 
     new WcfNinjectModule(), 
     new DynamicProxy2Module() 
    ); 
    return kernel; 
} 

ありがとう!

マット

EDIT 2011年12月12日: 全体WCF ninjectモジュール:要求されたとして、私は以下のいくつかの詳細を追加しました

public class WcfNinjectModule : NinjectModule 
{ 

    public override void Load() 
    { 
     Bind<IMyDependency>().To<MyDependency>(); 
     Bind<IService1>().To<Service1>(); 
    } 
} 

グローバルでのカーネルメソッドを作成します。 asaxは上にあり、global.asaxはNinjectWcfApplicationから継承します。

サービスメソッドは次のようになります。

public class Service1 : IService1 
{ 
    private IMyDependency _dependency; 

    public Service1() 
    { 
    } 
    public Service1(IMyDependency dependency) 
    { 
     _dependency = dependency; 
    } 

    [Time] 
    public virtual string GetData(string value) 
    { 
     return string.Format(_dependency.GetMyString(), value); 
    } 
} 
public interface IMyDependency 
{ 
    string GetMyString(); 
} 

public class MyDependency : IMyDependency 
{ 
    [Time] 
    public virtual string GetMyString() 
    { 
     return "Hello {0}"; 
    } 
} 

は、このヘルプをしていますか?

引数 'WithConstructor'を削除すると、Time Intercept属性はGetMyStringでは発生しますが、GetDataでは発生しません。

もう少し作業した後、マット・

+0

いただきまし '.WithConstructorArgumentを( "依存"、Kernel.Get ())を使用する理由、'?。 Ninjectはそれ自身がなくても依存関係を見つけるでしょう。 これで問題が解決しない場合は、問題の一部だけでなく問題を追加してください。 –

+0

私は可能な限り明示的にすることを好むだけですが、たとえそれを削除しても同じ問題が発生します。私は上記のいくつかの詳細を追加しようとしますが、すべてを追加するのは難しいです。 –

答えて

0

(およびその最後のポストエディットを書く)、それだけでWithConstructorArgument方法は、今私の問題、すべてを解決したの除去は正常に動作しているようだということが判明しました。

マット

関連する問題