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

本文关键字:默认 构造函数 IoC Unity | 更新日期: 2023-09-27 18:33:04

我想使用 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());

后一种可能性在系统上不起作用,由于明显的原因,异常...

是否有可能告诉Resolve方法使用 (( 构造函数?解析器覆盖似乎有助于传递参数,但我想使用默认构造函数,否则失败。知道我打电话给Activator.CreateInstance,但我想始终如一地使用 Unity。

注意: Exception只是用作包含多个构造函数的示例类。正如另一个开发人员创建的插件可能也有的那样,因为我无法使用接口控制可用的构造函数。

编辑:我的想法是,如果配置文件中有配置,Unity 将使用那里配置的构造函数。如果不是,请使用默认构造函数。我不喜欢后备的想法。首先尝试使用 Unity,然后使用激活器

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

我想你可以使用

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

我的QuickAppointment类有两个构造函数。一个是带参数的,第二个是没有参数的。所以在我的情况下需要解析无参数构造函数,我发现的唯一方法是:

            containerRegistry.Register(typeof(IQuickAppointment), (prm) => new QuickAppointment());