1

初めて Unity を使用しようとしていますが、噛むことができないほど噛んでしまったのではないかと思います。いくつかの抽象型を持つ基本ライブラリと、その上に具象型を持ついくつかのビジネス シナリオ固有のライブラリを持つ n 層アプリケーションがあります。例: 抽象型リードには 2 つの実装があります。1 つは NewAutomotiveLead という名前の NewAutomotiveLibrary にあり、もう 1 つは AutomotiveFinanceLead という名前の AutomotiveFinanceLibrary にあります。基本ライブラリ内には、Lead などの基本型でロジックを実行するアダプターのセットがあります。

Unity を初めて使用してインターフェイス ILeadDuplication を返そうとしています。このインターフェイスは、解決されると NewAutomotiveLeadDuplication または AutomotiveFinanceLeadDuplication のインスタンスを返し、ILeadDuplication で resolve を呼び出し、"NewAutomotive" または "AutomotiveFinance" のいずれかの文字列値を渡します (コンテナーで RegisterType が呼び出されたときにマップされた名前)。そのようです:

  using (IUnityContainer container = new UnityContainer())
  {
    container
      .RegisterType<ILeadDuplication, AutomotiveFinanceLeadDuplication>("AutomotiveFinance")
      .RegisterType<ILeadDuplication, NewAutomotiveLeadDuplication>("NewAutomotive");

    ILeadDuplication dupe = container.Resolve<ILeadDuplication>("AutomotiveFinance");
    Console.WriteLine(dupe.Created);
  }

注: これは説明のためのものです。ライブラリは ILeadDuplication の concreate クラスについて何も知らないため、実際の登録は構成ファイルで行う必要があります。

これはすべてうまく機能しますが、さらに一歩進める必要があります。resolve を呼び出すときに、NewAutomotiveLead または AutomotiveFinanceLead の基本型である Lead 型の引数を渡すことができる必要があります。

Unity が、「GrossMonthlyIncome」などの具体的なインスタンス AutomotiveFinanceLead に固有のプロパティを魔法のように見て、それを新たに作成された AutomotiveFinanceLeadDuplication インスタンス プロパティ GrossMonthlyIncome に割り当てる可能性があるかどうかを知る必要があります。

生成されるインスタンスとマップされるプロパティがなじみのないものであっても、ベース ライブラリの ILeadDuplication のインスタンスに対して汎用的なロジック セットを実行できるようにしたいと考えています。

ありがとう!

4

2 に答える 2

0

コンテナにその責任を負わせたい理由がわかりません。しかし、私はあなたがこの方法でそれを行うことができると思います:

Resolve() を呼び出して ILeadDuplication の新しいインスタンスを取得する直前に、使用する Lead のインスタンスと使用する GrossMonthlyIncome の値を登録できます。

  Lead lead = new NewAutomotiveLead()
  container.RegisterInstance<Lead>(lead);
  container.RegisterInstance<int>("GrossMonthlyIncome", lead.GrossMonthlyIncome);
  ILeadDuplication dupe = container.Resolve<ILeadDuplication>("AutomotiveFinance");

具象型に「GrossMonthlyIncome」という名前の依存関係がある場合、値はそこに注入されます。具象型のコンストラクターが Lead インスタンスを取る場合、インスタンスはそのコンストラクター パラメーターに挿入されます。

于 2009-06-26T03:36:26.347 に答える
0

あなたが何を求めているのかよくわかりませんが、私の推測では、構築時に依存関係を渡したいと考えています。これはさまざまな方法で実行できますが、ここでは例を示します。

[InjectionConstructor]
public class MyClass([Dependency("Named")] MyOtherClass other)
{

}

それが機能するためには、「Named」という名前の MyOtherClass 依存関係が、構成を介して、または RegisterType メソッドを介して追加することにより、コンテナー内に存在する必要があります。

私が基地から外れている場合はお知らせください。さらにお手伝いできるかもしれません...私はさまざまな状況で Unity とかなり多くの仕事をしてきたので、あなたが達成したいことを知っている限り、私はあなたを助けることができるかもしれません.

于 2009-06-25T19:27:18.907 に答える