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
}