我有一个带有如下构造函数的类:
public BatchService(IRepository repository, ILogger logger, string user)
在我的DI bootstrapper类中,我有以下RegisterType
命令:
.RegisterType<BatchService>(
new InjectionConstructor(
new ResolvedParameter<IRepository>("SomeRepository"),
new ResolvedParameter<ILogger>("DatabaseLogger")))
在我的客户端代码中,我想按如下方式实例化BatchService
:
BatchService batchService = DIContainer.Resolve<BatchService>()
正如您所看到的,我有一个名为user
的字符串参数作为BatchService
的构造函数的一部分,它不是DI逻辑的一部分。如果我需要在user
课程中使用BatchService
,我应该如何最好地处理这种情况?
答案 0 :(得分:4)
您可以使用ParameterOverride
:
BatchService batchService =
DIContainer.Resolve<BatchService>(new ParameterOverride("user", valueForUser));
答案 1 :(得分:-1)
首先,将ILogger
与业务逻辑混合起来并不是一件好事。您可以直接在BatchService
创建ILogger或解析至[Dependency]
属性。 DI它不是灵丹妙药,业务对象创建不应该依赖于ILogger
使用new InjectionParameter<string>("user")
请查看Registering Injected Parameter and Property Values了解详情