4

我正在尝试使用传入的类型实例化一个新类,然后使用 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] 属性(公共和标准 get;set;)没有被注入。调用 BuildUp 方法后,它们仍然为空。有什么明显的我做错了吗?

提前致谢。

4

1 回答 1

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);
于 2014-01-13T23:09:28.880 回答