C# Unity Framework vs Activator.CreateInstance

C# Unity Framework vs Activator.CreateInstance,c#,dependency-injection,unity-container,C#,Dependency Injection,Unity Container,我希望做一些简单的事情,比如从配置文件动态实例化一个类,配置文件在其中存储类型名列表。我想知道我是应该使用Unity框架还是仅仅使用Activator.CreateInstance。主要区别是什么 我想做的示例: LIST myList = Config.GetSection... blah blah foreach(item in in mylist) { IPlugIn x = (IPlugIn)Activator.CreateInstance(item.myPlugInTypeFr

我希望做一些简单的事情,比如从配置文件动态实例化一个类,配置文件在其中存储类型名列表。我想知道我是应该使用Unity框架还是仅仅使用Activator.CreateInstance。主要区别是什么

我想做的示例:

LIST myList = Config.GetSection... blah blah

foreach(item in in mylist) {
   IPlugIn x = (IPlugIn)Activator.CreateInstance(item.myPlugInTypeFromConfig,myassembly);

   x.Start(); 
}

在我的例子中,似乎我不需要Unity框架,只需要activator就可以了。

如果有许多类要使用一个组件,那么您可能希望使用Unity。在这些情况下,依赖项注入发生在构造函数时

然而,IMHO并不是插件体系结构的存储库。在我看来,您正在做您需要做的事情(尽管您需要一个类型转换和程序集名称),但有一个例外。插件体系结构通常使用ConfigurationManager来控制插件的加载


关于这种体系结构的真正好的文章,你可以在Dobbs博士上阅读。

如果你有许多类要使用组件,你可能会想使用Unity。在这些情况下,依赖项注入发生在构造函数时

然而,IMHO并不是插件体系结构的存储库。在我看来,您正在做您需要做的事情(尽管您需要一个类型转换和程序集名称),但有一个例外。插件体系结构通常使用ConfigurationManager来控制插件的加载


关于这种体系结构的真正好文章,您可以在Dobbs博士上阅读。

基本区别在于Unity(或任何DI容器)实际上可以管理您的依赖关系。Activator.CreateInstance只创建实例

如果有些类型有构造函数参数,而有些类型没有构造函数参数,该怎么办?还是要设置属性?容器将沿着对象图递归,并找出应该将哪些值放入这些构造函数参数或属性中。Activator.CreateInstance不会这样做

容器管理对象生存期。如果对于某些类型,您总是希望类型A具有相同的实例,但对于类型B具有不同的新实例,该怎么办?使用容器执行此操作很简单,您必须自己为Activator.CreateInstance执行此操作


如果您所做的只是“从配置文件中新建此类型列表,不带任何参数”,那么您是对的,您不需要容器。一旦你超越了这一点,容器就会给表带来更多的功能。

根本的区别在于Unity(或任何DI容器)实际上可以管理你的依赖关系。Activator.CreateInstance只创建实例

如果有些类型有构造函数参数,而有些类型没有构造函数参数,该怎么办?还是要设置属性?容器将沿着对象图递归,并找出应该将哪些值放入这些构造函数参数或属性中。Activator.CreateInstance不会这样做

容器管理对象生存期。如果对于某些类型,您总是希望类型A具有相同的实例,但对于类型B具有不同的新实例,该怎么办?使用容器执行此操作很简单,您必须自己为Activator.CreateInstance执行此操作


如果您所做的只是“从配置文件中新建此类型列表,不带任何参数”,那么您是对的,您不需要容器。一旦超出此范围,容器将为表带来更多功能。

如果只是使用字符串来指定类型,
Activator.CreateInstance
将需要第二个字符串来指定类型所在的程序集:还需要将结果转换为IPlugin.Understand。上面的代码只是psdo代码..可能重复:如果您只是使用字符串来指定类型,
Activator.CreateInstance
将需要第二个字符串来指定类型所在的程序集:您还需要将结果强制转换为IPlugin.Understand。上面的代码只是psdo代码..可能重复: