2

私は Ninject 2.0.2
Ninject.Extensions.Interception
with DynamicProxy2
Castle.Core
Castle.DynamicProxy2で作業しています

注射はうまくいきました。次に、コントローラーと bl レイヤーの間に wcf を挿入しました。レイヤー間のやり取りには、Ian Davis の Ninject.Extensions.Interception を使用しました。私は、Castle.Core と Castle.DynamicProxy2 を利用してプロキシを作成するために DynamicProxy2 を使用しました。クラスの私のBlレイヤーには、DALレイヤーの実装タイプへの参照があります。BLレイヤーに存在するプロパティに[Inject]の属性をマークすると、インターセプターが機能します。つまり、BL から DAL への接続を切断すると機能しますが、役に立たないということです。したがって、問題は、インターセプト メソッドを使用している場合でも、DAL のアドレス指定のオプションを保持する方法です。

件名に言及している投稿のみを見つけました- http://dotnet.dzone.com/news/ninject-2-dependency-injection?utm_sourc .. .)しかし、それはそれに対処する方法を説明していません。すべてのクラスで、既にコンストラクターを作成し、その上に [Inject] 属性を配置しました。

注: IMyClassDao のプロパティから Inject を削除すると、インジェクションが取得されますが、プロパティがなくても、無効なままです。どうすれば復活できますか?最近、1.5 から Ninject 2.0.2 にアップグレードしました - バージョンの問題に関連する可能性はありますか? 誰かがそれに対する解決策を持っていますか?

カーネル処理:

using Ninject; 
using Ninject.Modules; 
using System.Configuration; 
using System; 
using Ninject.Extensions.Interception; 
using Ninject.Extensions.Interception.Infrastructure.Language; 
using Ninject.Extensions.Interception.Request; 
private static IKernel createDefault() 
{ 
    IKernel _kernel = new StandardKernel(new 
    ControllerToBLModule(),new NHibernateModule(), new BlToDalModule()); 
    _kernel.Intercept(doIntercept).With<ControllerToBlInterceptor>(); 
    return _kernel; 
} 

コントローラーで bl に:

public class ControllerToBLModule : NinjectModule 
{ 
    public override void Load() 
    { 
        Bind<IMyInterfaceBL>().To<MyClassBL>().InRequestScope(); 
    } 
} 

bl から dal :

public class BlToDalModule : NinjectModule 
{ 
    public override void Load() 
    { 
           Bind<IMyClassDao>().To<MyClassDaoImpl>().InRequestScope(); 

    } 
} 

だから私のBLのコードはこのようなものです

public class MyClassBL: GlobalBL , IMyInterfaceBL 
{ 
    [Inject] 
    public MyClassBL() : base() { } 
    [Inject] 
    public IMyClassDao  _daoInstance{get;set;} 
    public virtual IList<MyObject> GetMyObject() 
    { 
        ... 
    } 
} 

そしてDALで:

public class MyClassDaoImpl : GlobalDAOImpl, IMyClassDao 
{ 
    [Inject] 
    public MyClassDaoImpl() : base() { } 
    public virtual  IList<MyObject> GetMyObjectDao() 
    { 
        ... 
    } 
}

私が得ているエラー:
Execute
System.NotSupportedException: 親にはデフォルトのコンストラクターがありません。デフォルトのコンストラクターは明示的に定義する必要があります。
System.Reflection.Emit.TypeBuilder.DefineDefaultConstructorNoLock(MethodAtt ributes 属性)
で System.Reflection.Emit.TypeBuilder.DefineDefaultConstructor(MethodAttribute s 属性)
で System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
で System.Reflection.Emit.TypeBuilder .CreateType()
at Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.CreateType(Type Builder type) in e:\horn.horn\ioc\castle.dynamicproxy\Working-2.2\src ....

インターセプト メソッドの使用中に、Ninject を介してレイヤーのアドレス指定の階層を保持する方法について、誰か考えを持っている人はいますか?

4

0 に答える 0