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では発生しません。
もう少し作業した後、マット・
いただきまし '.WithConstructorArgumentを( "依存"、Kernel.Get())を使用する理由、'?。 Ninjectはそれ自身がなくても依存関係を見つけるでしょう。 これで問題が解決しない場合は、問題の一部だけでなく問題を追加してください。 –
私は可能な限り明示的にすることを好むだけですが、たとえそれを削除しても同じ問題が発生します。私は上記のいくつかの詳細を追加しようとしますが、すべてを追加するのは難しいです。 –