我想了解委託工廠模式與Autofac。我知道如何使用IIndex <>與健()註冊,這是在這裏很好地解釋實施工廠:Configuring an Autofac delegate factory that's defined on an abstract classAutofac委託工廠使用func <>
我想知道如果我能創建使用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.
}
}
你爲什麼不只是使用'KeyIndex <>'帶'Keyed()'? Autofac無法爲你創建這個'Func'。您需要使用'Keyed()'或'Named()'類似以下方式將其註冊到容器中:'builder.Register >(c => s => c.ResolveKeyed (s) );'委託工廠只能創建一個帶參數的類型,而不能根據參數選擇一個類型,因爲這就是'IIndex <>'的用途。 –
nemesv
2013-03-15 07:26:59
對於IIndex <>我將需要引用我試圖避免的Autofac庫。我希望我的DI代碼只能在可能的情況下在Composite根目錄(單獨的庫)中。 – 2013-03-15 08:10:35