2017-10-16 8 views
0

単一性を使用して最も単純な方法で依存関係を登録する方法があるかどうか尋ねたいだけです。レジスタの依存関係Unity

​​

私は30-40のクラスとインターフェイスを持っています。私はそれを冗長コードしたくありません。最も単純な形式でコードを書く方法はありますか?すべてのクラスを取得してループを作成して登録するのと同じですか?

ありがとうございます!

+0

あなたの代わりに、実際のIoCのサービスロケータパターンを使用している場合、あなたは '解決(呼び出すことができます)'にpublicコンストラクタとUnityを持つ型は、それを事前に登録せずに見つけます。うまくいけば、実際にはIoCを使用しています。 – Crowcoder

答えて

1

Unity 3.0以降、コンベンションを使用して実装をコンテナに登録できます。 see the details hereを入力してください。コードは以下のようになります。どのタイプを自動登録するのか、どのように(マッピングを選択するのか)、名前と生涯を決定する必要があります。あなたはユニティ2.0を使用している場合

using (var container = new UnityContainer()) 
{ 
    container.RegisterTypes(
    AllClasses.FromLoadedAssemblies(), 
    WithMapping.MatchingInterface, 
    WithName.Default, 
    WithLifetime.ContainerControlled); 
} 

は、その後、あなたはnuget UnityConfigurationを参照して、追加のパッケージを使用する必要があります。あなたが実装および自動のためにスキャンすることができ、このパッケージを使用して、以下のようにそれらを登録、詳細については、プロジェクトのドキュメントを確認してください。

public class FooRegistry : UnityRegistry 
{ 

    (...) 

    Scan(scan => 
    { 
      scan.AssembliesInBaseDirectory(); 
      scan.ForRegistries(); 
      scan.With<FirstInterfaceConvention>(); 
      scan.With<AddAllConvention>() 
       .TypesImplementing<IHaveManyImplementations>(); 
      scan.With<SetAllPropertiesConvention>().OfType<ILogger>(); 
      scan.ExcludeType<FooService>(); 
    }); 
} 
+0

私はそれがv3.5以上であると思います。私は2.0にしかない –

+0

さて、私はUnity 2.0もカバーするために私の答えを更新しました、幸運!投稿が参考になったら、それを回答としてマークしてください。他の人に役立つでしょう。 –

+0

ユニティ構成をインストールした後も、引き続きRegisterTypes拡張を見つけることができません。 : –