9
を使用して依存関係プロパティを注入するために、私は次のクラスがあります。がどのようにIocをユニティ
public interface IServiceA
{
string MethodA1();
}
public interface IServiceB
{
string MethodB1();
}
public class ServiceA : IServiceA
{
public IServiceB serviceB;
public string MethodA1()
{
return "MethodA1() " +serviceB.MethodB1();
}
}
public class ServiceB : IServiceB
{
public string MethodB1()
{
return "MethodB1() ";
}
}
私はIoCのためにUnityの使用は、私の登録は、次のようになります
container.RegisterType<IServiceA, ServiceA>();
container.RegisterType<IServiceB, ServiceB>();
私はServiceA
インスタンスを解決し、 serviceB
はnull
になります。 どうすれば解決できますか?
コンストラクタとプロパティインジェクションのどちらかを選択する場合は、コンストラクタインジェクションを選択する必要があります。プロパティインジェクションは、クラスを単一性に依存させるか、または他の呼び出し元がその依存関係を提供する必要があることを「覚えている」ことに依存します。コンストラクタインジェクションは、依存関係がクラスにとって不可欠であるクラスを使用しようとする人には明らかです。 – Carlos
そして、クラスに複数の依存関係がある場合、それは特定の呼び出しでは必ずしも必要ではありませんか?それらはすべてインスタンス化されますか?あるいは、上記のようにアクセスされたときにのみインスタンス化されます:serviceB.method()? @Carlos – Legends
@あなたのすべての方法でそれらを使用しなくても、ServiceAが作成されると、すべての依存関係が確立され注入されます。 Unityは遅延のないインスタンス化をサポートしていませんが、拡張子として追加することができます:http://pwlodek.blogspot.hu/2010/05/lazy-and-ienumer-support-comes-to.html – nemesv