2017-05-16 8 views
3

自動登録はアーカイブしますが、すでに登録されているタイプは無視しますか? Iは、例えばシンプルインジェクタに登録済みのタイプがあるかどうか確認してください

var repositoryAssembly = typeof(SqlUserRepository).Assembly; 

var registrations = 
    from type in repositoryAssembly.GetExportedTypes() 
    where type.Namespace == "MyComp.MyProd.BL.SqlRepositories" 
    where type.GetInterfaces().Any() 
    select new 
    { 
     Service = type.GetInterfaces().Single(), 
     Implementation = type 
    }; 

foreach (var reg in registrations) 
{ 
    // TODO: how to check reg.Service has already registered or not 
    container.Register(reg.Service, reg.Implementation, Lifestyle.Transient); 
} 

単純インジェクタドキュメントのコードを参照し、IはISampleRepository intefaceを有し、2つの実装は、異なるアセンブリ

  1. SampleRepositoryアセンブリ "MyComp.MyProd.BL.SqlRepositories" である
  2. であります
  3. OverrideSampleRepositoryは異なる1つの

プロジェクト1である:

を働きました
var container = new Container(); 
container.AutoRegistration(); 

プロジェクト2:例外ISampleRepositoryは、すでにあなたはドキュメントの既存の登録を無効にする方法をdescribedこの

container.Verify(); 
container.GetRegistration(reg.Service) != null; // Not registered 
+1

私はあなたが達成しようとしていること、何が問題なのか、あなたの質問に関連して投稿したコードを理解していません。あなたの質問を更新して詳細を教えてください。 – Steven

+0

@Steven私の投稿を更新しました – Martinez

答えて

4

を行うことにより、登録のためにチェックすることができるはず

var container = new Container(); 
container.Register<ISampleRepository, OverrideSampleRepository>(); 
container.AutoRegistration(); 
+0

の最初の呼び出しの後でコンテナを変更することはできません。本当にありがとう – Martinez

1

を登録しているため。マニュアルには、次の例が含まれています。

var container = new Container(); 

container.Options.AllowOverridingRegistrations = true; 

// Register IUserService. 
container.Register<IUserService, FakeUserService>(); 

// Replaces the previous registration 
container.Register<IUserService, RealUserService>(); 

ただし、マニュアルをよく読んでください。

+1

container.GetRegistration(reg.Service)は大変楽しめません。例外:GetInstance、GetAllInstances、Verify – Martinez

関連する問題