0

DynamicProxy と StructureMap を使用してシンプルなアスペクト フレームワークを設計していますが、問題が発生しました。レジストリに次のメソッドがあります。

public T AddAspectsTo<T>(T concreteObject)
{
    ProxyGenerator dynamicProxy = new ProxyGenerator();
    return (T)dynamicProxy.CreateInterfaceProxyWithTargetInterface(typeof(T)
    ,concreteObject,
    new[] { (IInterceptor)new AspectInterceptor(attributeMap) });
}

これにより、次のようなコードを書くことができます。

For<ITestClass>().Use<TestClass>().EnrichWith(AddAspectsTo<ITestClass>);

重要なことは、AspectInterceptor の具体的なバージョンを作成していることです。そのクラスでは、IoC コンテナーからアイテムを取得する必要がありますが、この時点では、IContainer オブジェクトについてはわかりません。

結果の ITestClasses が使用されるまで IoC コンテナーにアクセスする必要はないので、IContainer が作成されますが、インスタンスを取得する方法がわかりませんか?

明確にするために、ここでは構造マップ コンテナーを次のようにセットアップするケースについて話しています。

IContainer container = new Container(new ItemWithPropertiesRegistry());

標準の ObjectFactory のものではなく、正常に動作します。

4

1 に答える 1

1

強化するインスタンスは、ラムダを介して利用できます。

For<ITestClass>().Use<TestClass>().EnrichWith(x => AddAspectsTo<ITestClass>(x));
于 2012-05-29T19:11:33.307 に答える