2013-04-09 3 views
2

Я учу Spring.Net. Я сделал небольшой пример, чтобы понять автозапуск тега, но он не работает. Ниже мои классы:Тэг Autowire не работает

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> 

Объект Текст инстанциирован но мне кажется, что мой объект Описание не инстанциирован.

Я прочитал документацию, и я проверил всю документацию, я могу найти: http://springindepth.com/book/in-depth-ioc-autowiring.html http://www.berchtel.com/archive/diplomathesis/html/05.4-spring_.net.html

Я также проверил все вопросы StackOverflow, связанные с autowire, но большинство из них связаны с autowire аннотаций (я сделал не пробуйте эту аннотацию).

Есть ли у кого-нибудь из вас идея о том, где проблема?

ответ

1

Ваша первая ссылка на самом деле - это книга о версии Java Spring. Spring.net - это порт для .net платформы Spring для Java со многими сходствами, но также и с некоторыми отличиями. Документация на Spring.net находится в www.springframework.net/.

По the docs on autowiring:

[Spring.net] будет искать объект по имени точно так же, как имущество, которое должно быть autowired. Например, если у вас есть определение объекта , которое установлено в autowire по имени, и оно содержит свойство Master, Spring.NET будет искать определение объекта с именем Master и использовать его как значение свойства Master на ваш объект определение.

Так что я думаю, вы должны изменить свое определение объекта в

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

И вы, возможно, придется сделать Texte.Descpublic вместо internal, но я не совсем уверен, что один.

Update

Ну, это работает для меня:

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> 
+0

Спасибо за ваш ответ, я изменил мой файл XML с recommandations и я установил мой класс Описание, как Открыто, но ошибка все тот же: «Ссылка на объект не установлена ​​в экземпляр объекта». (ошибка возникает в строке «Console.WriteLine» («текстовое описание:« + _desc.D »;») –

+0

Я добавил пример к моему ответу. – Marijn

+0

Большое спасибо @Marijn! он работает, я думаю, моя ошибка: 1. Описание не было опубликовано 2. В моем XML-файле я указал частный атрибут, вместо этого я должен был указать методы общего доступа еще раз спасибо! –

Смежные вопросы