【发布时间】:2019-11-20 12:51:46
【问题描述】:
使用 Unity 和 Prism,尝试在运行时解析接口。
注册
this.unityContainer.RegisterType<IMyValidationResult, MyValidationResult>(new ContainerControlledLifetimeManager());
具体实现
public class MyValidationResult : ValidationResult , IMyValidationResult
{
public MyValidationResult(string message, string tag)
: base(message, null, "", tag, null)
{ }
public MyValidationResult(string message, string tag = "", string key = "")
: base(message, null, key, tag, null)
{ }
// Etc.
然后我通过构造函数注入将IMyValidationResult 注入到视图模型中。继承的ValidationResult 是Microsoft.Practices.EnterpriseLibrary.Validation 类。显然,具体类型无法在运行时解析。有没有办法在 Unity RegisterType 中处理这些基本构造函数?
【问题讨论】:
-
“具体类型无法在运行时解析”到底是什么意思?您的
MyValidationResult不是被容器解析还是发生了什么?MyValidationResult将在创建时调用基类的构造函数。 -
意图从哪里获取消息和标签?恕我直言,我不认为您使用的是正确的 DI。 IoC 容器应仅放置在应用程序的根目录中。如果您的依赖项(例如您的情况)是灵活的并且可以更改,则 DI 不好。 DI 用于依赖项,这看起来更像是数据,我永远不会将其放入 IoC 容器中。
标签: c# .net wpf mvvm unity-container