Unity – 使用其他参数构造函数注入
我有一个类,其构造函数如下所示:
public BatchService(IRepository repository, ILogger logger, string user)
在我的DI bootstrapper类中,我有以下RegisterType命令:
.RegisterType( new InjectionConstructor( new ResolvedParameter("SomeRepository"), new ResolvedParameter("DatabaseLogger")))
在我的客户端代码中,我想实例化BatchService,如下所示:
BatchService batchService = DIContainer.Resolve()
如您所见,我有一个名为“user”的字符串参数作为BatchService的构造函数的一部分,该参数不是DI逻辑的一部分。 如果我需要在BatchService类中使用“user”,我该如何才能最好地处理这种情况?
预先感谢您提供的任何帮助!
请不要滥用Unity作为ServiceLocator 。
如果要创建需要运行时参数的对象,请使用工厂。 您甚至可以通过使用Unity版本的Typed Factories来放弃实现该工厂的行为,或者让Unity为您生成工厂代理 。
您可以使用ParameterOverride。
BatchService batchService = DIContainer.Resolve(new ParameterOverride("user", valueForUser));
首先,将ILogger
与业务逻辑混合起来并不是一个好主意。 您可以直接在BatchService
创建ILogger或通过[Dependency]
属性解析。 DI它不是灵丹妙药,业务对象的创建不应该依赖于ILogger
使用new InjectionParameter
请查看注册注入的参数和属性值以获取更多详细信息
- Windows窗体/ WPF太大了,我怎么能把它分开?
- ASP.NET:在客户机上获取文件路径(任何可能的解决方案/解决方法?)
- System.Web.Script.Serialization.JavaScriptSerializer或System.Runtime.Serialization.Json.DataContractJsonSerializer?
- WPF:Slider不会引发MouseLeftButtonDown或MouseLeftButtonUp
- 使用GraphDiff更新多对多关联
- 在WinRT和C#中使用HttpRequestHeaders
- 如何使用C#中的List 中的Exist
- winforms的异步加载
- TransactionScope的层次结构