0

次のような典型的なキャッスル ウィンザー インストーラーがいくつもあります。

public class StrategyInstaller : IWindsorInstaller
{
    #region IWindsorInstaller Members

    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Register(Component.For<INavigationStrategy>()
                               .ImplementedBy<NavigationStrategy>()
                               .LifestylePerWebRequest());

私の質問は、デバッグ モードのときとリリース モードのときとで、別の (たとえば、戦略) をインストールするにはどうすればよいですか?

(これは、リリース環境でのみ利用可能な依存関係のためのものです)

ありがとう

4

2 に答える 2

0

私の場合、コンパイルされたコードがデバッグとリリースで異なることは望ましくありません。これは、リリースをプッシュするときにかなりの混乱を引き起こす可能性があり、実際にリリースバイナリを実行するのはこれが初めてです。そうは言っても、実際のバージョンではなく、インスタンス化されたクラスのスタブバージョンが必要になる場合があるというあなたの主張は正しいです。

これはもう少しセットアップが必要ですが、実際の実装(実際のデータベースへの接続など)を含むアセンブリと、スタブされた実装(ハードコードされたデータベースや構成ベースのデータベースを返すなど)を含む別のアセンブリを作成することをお勧めします-値のように)。次に、ロードするアセンブリをアプリケーションに指示する構成値を用意します。このようにして、実際の実装とスタブされた実装の両方をデバッグモードとリリースモードでコンパイルし、両方の環境でアセンブリを交換できます。これは、何かをテストしたいが実際には実際の実装に影響を与えないような本番環境での問題をテストする場合にも役立ちます。

于 2012-10-14T18:15:41.803 に答える
0

コメントに従って次を使用して編集しました。

#if DEBUG
    container.Register(Component.For<INavigationStrategy>()
                           .ImplementedBy<NavigationStrategy>()
                           .LifestylePerWebRequest());
#else
    container.Register(Component.For<INavigationStrategy>()
                           .ImplementedBy<DebugNavigationStrategy>()
                           .LifestylePerWebRequest());        
#endif
于 2014-01-29T22:32:55.350 に答える