1

シンプルなインターフェースを介していくつかの複雑な機能を公開するライブラリにファサードがあります。私の質問は、ファサードで使用される内部型の依存性注入をどのように行うかです。私のC#ライブラリコードが次のようになっているとしましょう -

public class XYZfacade:IFacade
{
    [Dependency]
    internal IType1 type1
    {
        get;
        set;
    }
    [Dependency]
    internal IType2 type2
    {
        get;
        set;
    }
    public string SomeFunction()
    {
        return type1.someString();
    }
}

internal class TypeA
{
....
}
internal class TypeB
{
....
}

そして、私のウェブサイトのコードは次のようなものです-

 IUnityContainer container = new UnityContainer();
 container.RegisterType<IType1, TypeA>();
 container.RegisterType<IType2, TypeB>();
 container.RegisterType<IFacade, XYZFacade>();
 ...
 ...
 IFacade facade = container.Resolve<IFacade>();

ここで、facade.someFunction() は、facade.type1 とfacade.type2 が null であるため、例外をスローします。どんな助けでも大歓迎です。

4

2 に答える 2

3

内部クラスを挿入することは、推奨される方法ではありません。

これらのタイプをインスタンス化するために使用できる内部実装が宣言されているパブリックファクトリクラスをアセンブリに作成します。

public class FactoryClass
{
   public IType1 FirstDependency
   {
     get
     {
       return new Type1();
     }
   }

   public IType2 SecondDependency
   {
     get
     {
       return new Type2();
     }
   }
 }

また、XYZFacadeの依存関係は、FactoryClassクラスにあります。

public class XYZfacade:IFacade
{
   [Dependency]
   public FactoryClass Factory
   {
      get;
      set;
   }
}

テスト可能にする場合は、FactoryClassのインターフェイスを作成します。

于 2010-06-09T23:33:06.010 に答える
2

コンテナー作成コードが内部型のアセンブリの外部にある場合、Unity はそれらを参照および作成できないため、依存関係を注入できません。

于 2010-06-09T23:05:29.777 に答える