繁体   English   中英

Unity容器解析没有参数的构造函数

[英]Unity container resolve constructor with no parameter

我的一个班有2个构造函数:

public class Foo
{
    public Foo() { }

    public Foo(string bar) { }
}

当我从统一解析这个时,我得到一个异常,因为它查找string bar参数。 但是我希望Unity使用没有参数的构造函数来实例化这个类。 我怎样才能做到这一点?

我使用LoadConfiguration方法从配置文件中注册类型。

Unity容器配置:

container.LoadConfiguration("containerName");

配置文件:

<unity xmlns="">
  <typeAliases>
    <typeAlias alias="string" type="System.String, mscorlib" />
    <typeAlias alias="singleton" type="Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity" />
  </typeAliases>
  <containers>
    <container name="containerName">
      <types>
        <type type="IFoo, Assembly"
              mapTo="Foo, Assembly" />
        ...
      </types>
    </container>
  </containers>
</unity>
  • 构造函数上的[InjectionConstructor]属性指定在解析服务时应使用哪个构造函数

     public class Foo : IFoo { [InjectionConstructor] public Foo() { } public Foo(string bar) { } } 

这种方法使你的类与Unity相结合,你的类变得不那么可重用(想象你需要在需要使用另一个构造函数的不同场景中使用Foo并且不推荐这种方式, 在这里阅读更多相关内容

  • 更好的方法是使用API​​并按如下方式注册您的类

     container.RegisterType<IFoo>(new Foo()); 

在这里,您明确定义了如何解析依赖项。

  • 或者,您可以使用Xml Config文件,即在<register>元素中指定<contructor> <register>元素

请注意,我们没有在<constructor>元素中指定<params>子元素

如果不存在<param>子元素,则表示应调用零参数构造函数

在此处详细了解Xml架构

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM