2014-04-10 44 views
3

我想通過使用Castle IOC將記錄程序添加到Windows窗體應用程序。在Windows窗體應用程序中使用Castle Windsor

我註冊的記錄儀象下面這樣:

static class Program 
{ 
    [STAThread] 
    static void Main() 
    { 
     IWindsorContainer container = new WindsorContainer().Install(FromAssembly.This()); 

     container.Register(Component.For<ICommonLogger>().ImplementedBy(typeof(CommonLogger)).LifeStyle.Singleton); 
     container.Kernel.Resolver.AddSubResolver(new EAE_Automation.COM.LoggerResolver(container.Kernel)); 

    } 
} 

然後應用程序的另一種形式,我試圖使用記錄作爲財產,但它配備空的程序。

namespace Test.KNXManagement 
{ 
    public partial class Test: Form 
    { 
     public ICommonLogger Logger { get; set;} 

     public Tunneling() 
     { 
      Logger.Info("Testing......................."); 

     } 

    } 
} 

我想我在這裏失蹤

+0

將'ICommonLogger'依賴項移動到'Test'表單的構造函數中,並從容器中解析此表單。這可以讓您在解析表單時發現錯誤配置。 – Steven

+0

儘管您將Logger從私有域更改爲公共屬性,它仍然不起作用?你是如何註冊你的Test類的?如何解決? –

+0

你試過Logger = container.Resolve ();'將它添加到容器後? – aevitas

回答

2

我還註冊了Form類來解決子依賴關係。

container.Register(Classes.FromThisAssembly().BasedOn<Form>()); 

然後也如下

Application.Run(container.Resolve<Test>()); 

這就是解決我的問題運行應用程序。

謝謝大家。

0

下面的代碼很重要的一點,基於你的,工作完全正常,我:

private static IWindsorContainer _container; 
    static Program() 
    { 
     Debug.Listeners.Add(new ConsoleTraceListener()); 

     _container = new WindsorContainer().Install(FromAssembly.This()); 

     _container.Register(Component.For<ICommonLogger>().ImplementedBy(typeof(CommonLogger)).LifeStyle.Singleton); 
    } 

    private static ICommonLogger Logger { get; set; } 
    private static void Main(string[] args) 
    { 
     Logger = _container.Resolve<ICommonLogger>(); 

     Logger.Write("Text"); 

     Console.ReadLine(); 
    } 

    public interface ICommonLogger 
    { 
     void Write(string str); 
    } 

    public class CommonLogger : ICommonLogger 
    { 
     public void Write(string str) 
     { 
      Console.WriteLine(str); 
     } 
    } 

程序的控制檯輸出爲Text

+0

我應該從「表單」解析記錄器。也許這就是我的情況,不同於你的場景 –

+0

那麼你如何解決它的形式? – aevitas

+0

我想,我應該先註冊所有的窗體。如果我註冊他們,那麼記錄器可以解決。也許我應該爲此打開另一個問題。 –

相關問題