Unity构造函数注入其他参数

时间:2012-08-16 20:27:06

标签: c# oop unity-container

我有一个带有如下构造函数的类:

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,我应该如何最好地处理这种情况?

2 个答案:

答案 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了解详情