gpt4 book ai didi

c# - Unity容器解析无参数构造函数

转载 作者:太空宇宙 更新时间:2023-11-03 23:19:30 26 4
gpt4 key购买 nike

我的一个类(class)有 2 个构造函数:

public class Foo
{
public Foo() { }

public Foo(string bar) { }
}

当我从 unity 解决这个问题时,我得到一个异常,因为它寻找 string bar 参数。但是我希望统一使用不带参数的构造函数实例化此类。我怎样才能做到这一点?

我正在使用 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)而这种方式不是推荐,阅读更多关于this here

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

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

在这里,您明确定义您希望如何解决您的依赖关系。

  • 或者您可以使用 Xml配置文件,即指定<contructor>里面的元素<register>元素

请注意,我们没有指定 <params>里面的子元素 <constructor>元素

If no <param> child elements are present, it indicates that the zero-argument constructor should be called

查看更多关于 Xml 的信息架构 here

关于c# - Unity容器解析无参数构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35908270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com