Unity容器无法构建

时间:2013-06-04 14:25:59

标签: c# reflection inversion-of-control unity-container

我正在尝试使用传入的类型实例化一个新类,然后使用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。有什么明显的东西我做错了吗?

提前致谢。

1 个答案:

答案 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);