C# SimpleInjector工厂委托-创建具有依赖项的实例

C# SimpleInjector工厂委托-创建具有依赖项的实例,c#,dependency-injection,simple-injector,C#,Dependency Injection,Simple Injector,根据本文,如何通过构造函数创建具有依赖关系的实例 例如 那怎么办 我尝试使用构造函数参数注册实现,然后向工厂注册,但这会导致一个错误,因为工厂无法创建实例。您可以通过将以下方法添加到RequestHandlerFactory: public void Register(string name, Func<IRequestHandler> factory) { var producer = Lifestyle.Transient .CreateProducer

根据本文,如何通过构造函数创建具有依赖关系的实例

例如

那怎么办


我尝试使用构造函数参数注册实现,然后向工厂注册,但这会导致一个错误,因为工厂无法创建实例。

您可以通过将以下方法添加到
RequestHandlerFactory

public void Register(string name, Func<IRequestHandler> factory) {

    var producer = Lifestyle.Transient
        .CreateProducer<IRequestHandler>(factory, container);

    this.producers.Add(name, producer);
}
通过这种方式,
OrdersRequestHandler
可以简单地依赖于
ISomeWebServiceClientProxy
,而不是不明确的
字符串

public OrdersRequestHandler(ISomeWebServiceClientProxy proxy, 
    IOrderValidationService service) {
    // store dependencies
}
public void Register(string name, Func<IRequestHandler> factory) {

    var producer = Lifestyle.Transient
        .CreateProducer<IRequestHandler>(factory, container);

    this.producers.Add(name, producer);
}
factory.Register("orders", () => new OrdersRequestHandler(
    "my uri",
    container.GetInstance<IOrderValidationService>()));
public interface ISomeWebServiceClientProxy {
    Data LoadData();
}

class RealSomeWebServiceClientProxy : ISomeWebServiceClientProxy {
    private readonly string uri;
    public RealSomeWebServiceClientProxy(string uri) {
        this.uri = uri;
    }

    public Data LoadData() {
        // use uri, call web service, return data.
    }
}
public OrdersRequestHandler(ISomeWebServiceClientProxy proxy, 
    IOrderValidationService service) {
    // store dependencies
}