2011-08-08 2 views
0

私はこのようにインスタンス化されていIRFConfigurationSection:私はウィンザー城には、このコールを入れて、このクラスのシングルトンを作りたいパラメータを使用したメソッドコールによって、ウィンザーキャッスルのサービスを解決できますか?

(RFConfigurationSection)ConfigurationManager.GetSection("userSettings/ABZReportFactoryServer"); 

を。したがって、このRFConfigurationSectionクラスをインスタンス化する必要がある場合、このようにしたいと思います。

IWindsorContainer container = new WindsorContainer(new XmlInterpreter()); 
configSection = container.Resolve<IRFConfigurationSection>(); 

これを行うには何とかWindsor Castleの設定を構成できますか?

答えて

1

うファクトリを使用するより良いアプローチ、例えば:

public interface IConfigurationFactory<out TConfigurationSection> 
{ 
    TConfigurationSection GetConfiguration(); 
} 

public class RFConfigurationFactory : IConfigurationFactory<IRFConfigurationSection> 
{ 
    public IRFConfigurationSection GetConfiguration() 
    { 
     return ConfigurationManager.GetSection("userSettings/ABZReportFactoryServer") as RFConfigurationSection; 
    } 
} 

こうすることで、あなたはコンテナに工場を追加し、そのインスタンスを解決できます。

var configFactory = container.Resolve<IConfigurationFactory<IRFConfigurationSection>>(); 
var config = configFactory.GetConfiguration(); 
1
container.Register(
    Component.For<RFConfigurationSection>() 
     .UsingFactoryMethod(() => ConfigurationManager.GetSection("userSettings/ABZReportFactoryServer")) 
     .LifeStyle.Singleton 
); 
+0

しかし、この方法では、これは設定ではなく、コード内にあります。だから私のセクションが変わったら、私はすべての場所でそれを変更する必要があります。 私が間違っている場合は私を修正してください。 – Vajda

+1

このコードは一度だけ使用すればよいでしょう。これはxmlの設定と同じですが、コード(流暢なAPIを使用)ではhttp://docs.castleproject.org/Windsor.Fluent-Registration-API.ashxを参照してください – nickvane