Unity IoC:在解析时强制使用默认构造函数

时间:2014-12-04 16:30:16

标签: c# unity-container

我想使用Unity创建类型。我不知道编译时的具体类型。我使用以下代码从字符串创建一个Type实例:

var theType = Type.GetType( "System.Exception" );

当我尝试使用容器解析类型时,我尝试使用具有最多参数的构造函数时得到异常:

_Container.Resolve( theType ); // <- uses a constructor with message, etc.

我知道我可以使用包含

之类的配置文件来配置解析
<register type="Exception">
    <constructor />
</register>

或使用

代码
container.RegisterType<Exception>(new InjectionConstructor());

由于显而易见的原因,后一种可能性对System.Exception不起作用......

是否有可能告诉Resolve方法使用()-constructor? ResolverOverride似乎有助于传递参数,但我想使用默认构造函数,否则失败。我知道我打电话给Activator.CreateInstance,但我想一直使用Unity。

注意: Exception仅用作包含多个构造函数的示例类。由于另一个开发人员创建的插件可能也有,因为我无法控制使用的可用构造函数界面。

编辑:我的想法是,如果配置文件中有配置,Unity将使用在那里配置的构造函数。如果不使用默认构造函数。我不喜欢回退的想法。首先使用Unity,然后使用Activator

1 个答案:

答案 0 :(得分:0)

我认为您可以使用

var theType = Type.GetType("some_type");
_Container.Register(theType,  new InjectionConstructor());