2011-02-09 10 views
1

次登録でAutofac:解決されるコンポーネントへの参照をその扶養家族に渡すにはどうすればよいですか?以下では

public class AClass 
{ 
    public ADependent Dependent { get; set; } 
} 
public class ADependent 
{ 
    public ADependent(AClass ownerValue) {} 
} 

...

builder.RegisterType<AClass>().PropertiesAutowired().InstancePerDependency(); 
builder.RegisterType<ADependent>().PropertiesAutowired().InstancePerDependency(); 

私はAClassは解決 は、どのように私は、「ownerValue」を解決しているAClassはのインスタンスであることを確認してください別のインスタンスではありませんか? THX上記の例

ON

FOLLOWが本当にスキャンする際に登録するときにADependentを配線する方法である、適切に問題をキャッチしていません...例えば

public class AClass : IAClass 
{ 
    public IADependent Dependent { get; set; } 
} 
public class ADependent : IADependent 
{ 
    public ADependent(IAClass ownerValue) {} 
} 

// registrations... 

    builder.RegisterAssemblyTypes(assemblies) 
    .AssignableTo<IAClass>() 
    .As<IAClass>() 
    .InstancePerDependency() 
    .PropertiesAutowired(); 

    builder.RegisterAssemblyTypes(assemblies) 
    .AssignableTo<IADependent>() 
    .As<IADependent>() 
    .InstancePerDependency() 
    .PropertiesAutowired(); 

機能私は本当に別の関係タイプのように探しています

public class ADependent : IADependent 
{ 
    public ADependent(OwnedBy<IAClass> ownerValue) {} 
} 

OwnedByはその所有者を示していますlueはADependentを作成したインスタンスです。このようなものが意味をなさないでしょうか?確かにUIコンポーネントの配線を簡単にするでしょう。あなたがトリックを行うためのラムダを登録することができます

答えて

0

builder.Register<AClass>(_ => 
{ 
    var a = new AClass(); 
    a.Dependent = new ADependent(a); 
    return a; 
}); 
+0

は、合意されました。しかし、どうやってスキャンするのですか?私はさらに質問を編集しました。 –

1

をスティーブンのアプローチを拡張するには、パラメータとして最初のインスタンスを渡して、でもResolve()番目のクラス次のことができます。

builder.RegisterType<ADependent>(); 
builder.Register<AClass>(c => 
{ 
    var a = new AClass(); 
    a.Dependent = c.Resolve<ADependent>(TypedParameter.From(a)); 
    return a; 
}); 
+0

Thx。しかし、私がこれを気に入らない理由は、それがオートワイヤリングを失うということです。それは私にとってIOCの利点の大部分です。また、アセンブリをスキャンするときに私は何をしますか?私はこの問題を私に近づけるように質問を編集しました。 –

+0

こんにちはTomあなたが必要と思ったら、このアプローチをあなたのスキャン設定に組み込むことができます。ただちにOnActivating()イベントでプロパティを代入し、そのインスタンスをパラメータとして渡します。もう少しコードがあり、ctorのパラメータではなく、(おそらくマーカータイプの)プロパティをマークする方法を理解する必要があります。乾杯、ニック。 –

関連する問題