私はAutofacでデリゲートファクトリパターンを理解しようとしています。私はここでうまく説明されているキー付き()登録、とIIndex <>を使用して工場を実装する方法を知っている:Configuring an Autofac delegate factory that's defined on an abstract classfuncを使用したオートファクトデリゲートファクトリ<>
私はのFunc <>を使用してファクトリを作成できるかどうかを知りたい、と私はどのように行うのでしょう次のサンプルのための登録:
public enum Service
{
Foo,
Bar
}
public interface FooService : IService
{
ServiceMethod();
}
public interface BarService : IService
{
ServiceMethod();
}
public class FooBarClient
{
private readonly IService service;
public FooBarClient(Func<Service, IService> service)
{
this.service = service(Service.Foo);
}
public void Process()
{
service.ServiceMethod(); // call the foo service.
}
}
'IIndex <>'と 'Keyed()'を併用していますか? Autofacはこの 'Func'を作成することはできません。 'Keyed()'や 'Named()'を使ってコンテナに登録する必要があります: 'builder.Register >(c => s => c.ResolveKeyed ); 'Delegateファクトリは、パラメータを持つ型を1つだけ作成し、パラメータに基づいて型を選択することはできません。これは、' IIndex <> 'のためです。 –
nemesv
IIndex <>では、避けようとしているAutofacライブラリを参照する必要があります。可能であれば、自分のDIコードをコンポジットルート(別のライブラリ)にしたい。 –