私はautofacで作業しています。これまでのところ、すべての依存関係をコンストラクター インジェクションで解決しています。
私が立ち往生する場合があります:
特定の顧客クラスを考慮すると、次のようになります。
public class Customer : ICustomer
{
public string Name { get; set; }
private int ExternId { get; set; }
public IExternalIdProvider externalIdProvider { get; set; }
public Customer()
{
this.externalIdProvider = new ConcreteIdProvider(this);
}
public BevorSave()
{
this.ExternId = externalIdProvider.GetNextId();
}
}
リクエストまたは GUI アクションに基づいて新しい顧客オブジェクトを作成するため。新しいオペレーターを使用します。ただし、挿入したい CustomerClass 内に IdProvider があります。(プロパティとして)。
顧客が ioC コンテナーによって解決される場合、次のような構成を使用します。
builder.RegisterType<ConcreteIdProvider>().As<IExternalIdProvider>();
builder.RegisterType<Customer>().As<ICustomer>()
.OnActivated(ae =>
{
IExternalIdProvider idProvider =
ae.Context.Resolve<IExternalIdProvider>(TypedParameter.From(ae.Instance));
ae.Instance.externalIdProvider = idProvider;
});
私の質問は次のとおりです:どうすれば、Customer に ExternalIdProvider の動作を挿入できますか? (autofac を使用)
この記事では、サービス ロケーターを使用してこれを行う方法のサンプルを示します: http://blogs.msdn.com/b/simonince/archive/2008/06/30/dependency-injection-is-dead.aspx
ご協力いただきありがとうございます。