Tôi đang cố gắng hiểu mẫu nhà sản xuất ủy nhiệm với Autofac. Tôi biết làm thế nào để thực hiện nhà máy sử dụng IIndex <> với Keyed() đăng ký, được giải thích độc đáo ở đây: Configuring an Autofac delegate factory that's defined on an abstract classNhà máy ủy quyền của Autofac bằng cách sử dụng func <>
Tôi muốn biết nếu tôi có thể tạo ra một nhà máy sử dụng Func <>, và làm thế nào tôi sẽ làm đăng ký mẫu sau:
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.
}
}
Tại sao bạn không chỉ cần sử dụng 'IIndex <>' với 'Keyed()'? Autofac không thể tạo 'Func' này cho bạn. Bạn cần phải đăng ký nó trong thùng chứa của bạn bằng cách sử dụng 'Keyed()' hoặc 'Named()' giống như: 'builder.Register > (c => s => c.ResolveKeyed (s)) 'Các nhà máy ủy nhiệm chỉ có thể tạo một kiểu với các tham số và không chọn một kiểu dựa trên tham số vì đây là' IIndex <> 'cho. –
nemesv
Đối với IIndex <> tôi sẽ cần phải tham khảo thư viện Autofac mà tôi đang cố gắng tránh. Tôi muốn mã DI của tôi được trong Composite gốc (thư viện riêng biệt) chỉ khi có thể. –