kullanarak bağımlılık özelliği enjekte aşağıdaki sınıfları:Nasıl IOC Unity
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() ";
}
}
Ben IoC için Unity kullanmak benim kaydı şöyle görünür:
container.RegisterType<IServiceA, ServiceA>();
container.RegisterType<IServiceB, ServiceB>();
Ben ServiceA
örneği çözmek, serviceB
, null
olacaktır. Bunu nasıl çözebilirim? Burada
Kurucu ile özellik enjeksiyonu arasında seçiminiz varsa, kurucu enjeksiyonunu seçmeniz gerektiğini düşünüyorum. Mülkiyet enjeksiyonu, sınıfı birliğe veya bu bağımlılığı sağlamak için ihtiyaç duydukları 'hatırlamayı' isteyen başka bir araca bağımlı hale getirecektir. Yapıcı enjeksiyonu, sınıfı sınıf için bağımlılığın zorunlu olduğu sınıfını kullanmaya çalışan herkese açık hale getirir. – Carlos
Sınıfta birden fazla bağımlılık varsa, bazı çağrılarda bu gerekli değildir? Hepsi örneklenecek mi? Ya da sadece, yukarıdaki gibi erişildiğinde, örneğin: serviceB.method()? @Carlos – Legends
@ Tüm bağımlılıklarınız, tüm yönteminizde kullanmasanız bile ServiceA oluşturulduğunda taklit edilir ve enjekte edilir. Unity, kutudan tembel bir örneği desteklemiyor ancak uzantı olarak eklenebilir: http://pwlodek.blogspot.hu/2010/05/lazy-and-ienumerable-support-comes-to.html – nemesv