我正在尝试使用传入的类型实例化一个新类,然后使用Unity容器来构建对象以注入其依赖项。
Unity Container没有任何扩展/策略。我只是使用一个未改变的统一容器。它正确加载配置并在代码中的其他位置使用以解决对项的依赖性。
我有以下代码:
// Create a new instance of the summary.
var newSummary = Activator.CreateInstance(message.SummaryType) as ISummary;
this.UnityContainer.BuildUp(newSummary.GetType(), newSummary);
// Code goes on to use the variable as an ISummary...
未注入类的[Dependency]属性(public和standard get; set;)。调用BuildUp方法后,它们仍为null。有什么明显的东西我做错了吗?
提前致谢。
答案 0 :(得分:2)
当你调用newSummary.GetType()时,它将返回基础类型。在这种情况下,无论SummaryType如何(比如MySummaryType)。当它调用BuildUp时,类型不匹配,所以它不起作用。
// Code translates to:
this.UnityContainer.BuildUp(typeof(MySummaryType), newSummary);
// But newSummary is ISummary
让BuildUp工作:
this.UnityContainer.BuildUp<ISummary>(newSummary);
或
this.UnityContainer.BuildUp(typeof(ISummary), newSummary));
您可以使用的另一个选项(IHMO首选方式)是使用Unity的Resolve方法。 BuildUp用于您无法控制其创建的对象。这不是查看代码的情况。
ISummary newSummary = this.UnityContainer.Resolve(message.SummaryType);