2

我正在学习 Spring.Net。我做了一个小例子来理解标签自动装配,但它不起作用。在我的课下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Spring.Context;
using Spring.Context.Support;
namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {
            IApplicationContext context;
            context = new XmlApplicationContext("spring.xml");
            Texte texte = null;
            texte = (Texte)context.GetObject("texte");
            texte.print();
            Console.ReadKey();
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication6
{
    class Texte
    {
        private String _t;
        private Description _desc;
        public String T
        {
            get { return _t; }
            set { _t = value; }
        }
        internal Description Desc
        {
            get { return _desc; }
            set { _desc = value; }
        }
        public void print()
        {
            Console.WriteLine("text in object: " + _t);
            Console.WriteLine("text description: " + _desc.D);
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication6
{
    class Description
    {
        private String _d;
        public String D
        {
            get { return _d; }
            set { _d = value; }
        }
    }
}

这里是我的 xml 文件:

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
  <object id = "texte" type = "ConsoleApplication6.Texte" autowire="byName">
    <property name = "_t" value = "I am the Text"/>
  </object>
  <object id = "_desc" type = "ConsoleApplication6.Description">
    <property name = "_d" value = "I am the description"/>
  </object>
</objects>

Text 对象已实例化,但似乎我的对象 Description 未实例化。

我阅读了文档并检查了所有可以找到的文档: http: //springindepth.com/book/in-depth-ioc-autowiring.html http://www.berchtel.com/archive/diplomathesis/html/ 05.4-spring_.net.html

我还检查了 stackoverflow 中与 autowire 相关的所有问题,但其中大多数都与 autowire 注释有关(我没有尝试这个注释)。

你们中有人知道问题出在哪里吗?

4

1 回答 1

2

您的第一个参考实际上是一本关于 Spring 的 Java 版本的书。Spring.net 是 Spring for Java 框架的 .net 端口,有很多相似之处,但也有一些不同。spring.net 上的文档位于www.springframework.net/

根据有关自动装配的文档

[Spring.net] 将寻找一个与需要自动装配的属性名称完全相同的对象。例如,如果您有一个按名称设置为自动装配的对象定义,并且它包含 Master 属性,Spring.NET 将查找名为 Master 的对象定义,并将其用作对象定义中 Master 属性的值.

所以我想你必须将你的对象定义更改为

<object id = "Desc" type = "ConsoleApplication6.Description">
  <property name = "_d" value = "I am the description"/>
</object>

你可能不得不 makeTexte.Desc public而不是internal,但我不太确定那个。

更新

好吧,这对我有用:

using System;
using NUnit.Framework;
using Spring.Context.Support;

namespace XmlConfig.AutoWireByName
{
    [TestFixture]
    public class AutoWireByName
    {
        [Test]
        public void LetsAutoWireByName()
        {
            var ctx = new XmlApplicationContext("AutoWireByName/objects.xml");
            var texte = (Texte)ctx.GetObject("texte");
            texte.Print();
        } 
    }

    class Texte
    {
        public string T { get; set; }
        public Description Desc { get; set; }

        public void Print()
        {
            Console.WriteLine("text in object: " + T);
            Console.WriteLine("text description: " + Desc.D);
        }
    }

    class Description
    {
        public string D { get; set; }
    }
}
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
  <object id = "texte" type = "XmlConfig.AutoWireByName.Texte, XmlConfig" autowire="byName">
    <property name = "T" value = "I am the Text"/>
  </object>
  <object id = "Desc" type = "XmlConfig.AutoWireByName.Description, XmlConfig">
    <property name = "D" value = "I am the description"/>
  </object>
</objects>
于 2013-04-09T15:25:37.970 回答