4

しばらく依存性注入フレームワークとして使用してきた Ninject で動作するように傍受をセットアップしようとしています。

NuGet から傍受拡張機能をダウンロードし、Castle Dynamicproxy 実装と LinFu 実装の両方で試してみましたが、アプリケーションでは動作しませんでした。

パラメーターなしのコンストラクターを持たないクラスでプロキシを作成すると、Castle はエラーを発生させました。これは、すべてのサービス オブジェクトにコンストラクターを介して注入された依存関係があるためです。これは問題です。エラーは次のとおりです。

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

LinFu インターセプターは、コードが汎用パラメーターを使用してメソッドを呼び出すまで、より適切に機能し、次のようになりました。

System.ArgumentException: ジェネリック型は無効です。パラメータ名: methodInfo

これは、傍受しようとしているクラスの 1 つの簡略化されたバージョン コードです。

[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

}

Add と GetAll は正常に動作しますが、GetEntity がプロキシで呼び出されるとエラーが発生します。

この時点で、どちらのインターセプターもコード ベースで機能しないため、私は立ち往生しています。単純なデモクラスではなく、実際の複雑な実稼働システムで Ninject インターセプトを使用した人はいますか? もしそうなら、どのように? 機能する限り、どのインターセプターを使用してもかまいません。

それとも、Ninject による傍受はまだ十分に成熟していないのでしょうか。全体を Unity のような別のものに置き換えることを検討する必要がありますか?

4

1 に答える 1

2

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

于 2012-01-14T00:38:57.410 に答える