2011-08-11 8 views
1

私は次のコードを持っている:タイプ登録は、(名称「お客様」との)IRepositoryが新しいCustomerEntities意志解決されるたびに発生した場合、またはときnew CustomerEntities()が一度呼び出されます場合、私は疑問に思って何Unity InjectionConstructorはいついつ実行されますか?

IOC.Container.RegisterType<IRepository, GenericRepository> 
       ("Customers", new InjectionConstructor(new CustomerEntities())); 

です作られる。

後者でない場合は、デリゲートのように動作させる方法がありますか? (?それは新しいものにそれを解決するたびに行いますので)

私はこのコードを見つけました:

IOC.Container.RegisterType<IRepository, GenericRepository>("Customers") 
      .Configure<InjectedMembers>() 
      .ConfigureInjectionFor<ObjectContext> 
       (new InjectionConstructor(new CustomerEntities())); 

私はそれを行うかどうかわからないか、それが何を行うだけの古い方法であれば私の最初のコードスニペットはそうです。

アドバイスは素晴らしいと思います!

答えて

5

登録時に1つのCustomerEntitiesオブジェクトが作成され、そのインスタンスが後で解決されるすべてのGenericRepositoryオブジェクトにわたってパラメータとして共有されます。

GenericRepositoryのインスタンスごとに個別のCustomerEntitiesインスタンスを作成したい場合は、これは簡単です。コンテナにリフティングを実行させるだけです。登録には、次の操作を行います。。。

IOC.Container.RegisterType<IRepository, GenericRepository>("Customers", 
    new InjectionConstructor(typeof(CustomerEntities))); 

これはIRepositoryを解決するとき、コンテナ」を伝えるGenericRepositoryのインスタンスを作成し、単一のCustomerEntitiesパラメータを取るコンストラクタを呼び出して、コンテナによってそのパラメータを解決します

これは、このトリックを行う必要があります。CustomerEntitiesを解決するためにコンテナ内で特別な設定を行う必要がある場合は、別のRegisterType呼び出しでそれを行います。それを使って、それ以上のことはできません今すぐ登録する。

+0

あなたは素晴らしいです!今はとても分かりやすいようですが、私はこの壁に本当にぶつかっていました。方法を指摘してくれてありがとう! – Vaccano

関連する問題