2012-01-24 12 views
3

私はこのようなコードサンプルを持っています。DependencyキーワードとUnityContainerでプロパティを使用して初期化

public class AdventureWorksRepository 
{ 
    [Dependency] 
    private AdventureWorksEntities Context 
    { 
     get; set; 
    } 

    public AdventureWorksRepository() 
    { 
     SelectDemo(); 
    } 

    public void SelectDemo() 
    { 
     var productNames = Context.Products.Select(item => item.Name); 

     foreach (var productName in productNames) 
     { 
      Console.WriteLine("Name : "productName); 
     } 
    } 
} 

とHERESに私は依存関係のキーワードを理解してきたものから、メインprograme

private static void Main(string[] args) 
{ 
    UnityProvider.Container = new UnityContainer(); 
    UnityProvider.Container.RegisterInstance<AdventureWorksEntities>(new AdventureWorksEntities()); 
    var repository = UnityProvider.Container.Resolve<AdventureWorksRepository>(); 
} 

がAdventureworksEntitiesプロパティを初期化するためにUnityに伝える必要がありますが、私は「何を任意のヒント取得し、null refrence例外を保ちますしているか間違っていると思われる

答えて

2

[Dependency]属性を使用しないことをお勧めします。それらを使用すると、コードベース内のどこにでもコンテナへの参照があります。詳細な説明はthis articleを参照してください。

あなたは、依存関係ではなくInjectionProperty

このような
container.RegisterType(typeof(IMyInterface), typeof(MyImplementation), new InjectionProperty("MyProperty")); 

を使用して注入したいとUnityに伝えることができます。 Unityがその値を解決するのではなく、そのプロパティに特定の値を注入する場合は、InjectionPropertyのコンストラクタで独自の値を指定することもできます。

Btw:あなたのプロパティは公開されている必要があります。私的なプロパティでは動作しません。そのプロパティをpublicにしたくない場合は、コンストラクタインジェクションの代わりにコンストラクタインジェクションを実行する必要があります。

public class AdventureWorksRepository 
{ 
    private readonly AdventureWorksContext context; 
    public AdventureWorksRepository(AdventureWorksContext context) 
    { 
    if(context == null) throw new ArgumentNullException("context"); 
    this.context = context; 
    } 
} 
関連する問題