4

私は依存性注入フレームワークとしてしばらく使用しているNinjectで動作するようにインターセプトを設定しようとしています。Ninjectインターセプト動的プロキシの問題

NuGetからインターセプトエクステンションをダウンロードし、Castle Dynamicproxyの実装とLinFuの実装の両方で試しましたが、私たちのアプリケーションで動作することはできませんでした。

パラメータレスコンストラクタを持たないクラスでプロキシを作成すると、城がエラーになります。これは、すべてのサービスオブジェクトにコンストラクタ経由で依存関係が挿入されているためです。エラーは次のとおりです。

System.ArgumentException:クラスemedia.RapidSystems.Subscriber.Presenters.RRSubmissionPresenterのプロキシをインスタンス化できません。 パラメータのないコンストラクタが見つかりませんでした。 パラメータ名:

System.ArgumentExceptionの::コードは、一般的なパラメータを持つメソッドが呼び出されるまで、constructorArguments

LinFuインターセプター

は、それは、次の私に与えた権利まで、より良い仕事をジェネリック型は有効ではありません。 パラメータ名:ここにMETHODINFO

は私が傍受しようとしているクラスの一つのための簡易版のコードです:

[LogCalls] 
public class Repository<T> : IRepository<T> 
     where T : class 
{ 
    public virtual T GetEntity<TKey>(ObjectContext context, TKey key) 
    { 
     var entity = GetEntity(context, key, _emptyLoadingStrategy); 
     return entity; 
    } 

    public virtual IQueryable<T> GetAll(ObjectContext context) 
    { 
     var query = GetAll(context, _emptyLoadingStrategy); 
     return query; 
    } 

    public virtual T Add(ObjectContext context, T entity) 
    { 
     context.AddObject(EntitySetName(context), entity); 
     return entity; 
    } 

    //other code goes here 

} 

が追加とGETALLは正常に動作しますがGetEntityがプロキシ上で呼び出されたときにエラーが発生します。

この時点で、どちらのインターセプタもコードベースで動作しないため、私は立ち往生していません。単純なデモクラスではなく、本当の複雑な制作システムで作業するNinjectインターセプトを誰かが持っていますか?私はそれが動作する限り私が使用するインターセプタを気にしません。

Ninjectの傍受はまだ成熟していません。Unityのようなもので全体を置き換えることを検討する必要がありますか?

答えて

3

バージョン3.0.0-rc2を使用してください。それは、動的プロキシへのインターフェイスプロキシのサポートを追加します

+2

NuGetからそれを実行しようとしましたが、それはまったく実行されず、エラーを返します "メソッドが見つかりません: 'System.Delegate System.Reflection.MethodInfo.CreateDelegate(System.Type ) ' 実稼働環境でプレリリース版を使用することはできませんので、答えはまだ成熟していないと思いますので、バージョン3がリリースされるまで待たなければなりません。 – Mant101

関連する問題