2016-03-21 12 views
1

Değişken olarak kaydedilmiş ülke kodunu temel alarak Unity DI kapsayıcısını kullanarak sınıfımı dinamik olarak yüklemek istiyorum.Sınıfımı dinamik olarak yüklemek için benim senaryo için Unity DI nasıl kullanılır

Kazanç uygulamalarımız, UPS, FedEx ve Purolator gibi 3. taraf şirketler tarafından geliştirilen web hizmetini kullandığımız bir gönderim işlevselliğine sahiptir.

Şimdi kodumu bir arada nasıl tasarlamalıyım, böylece gönderi sınıfımı değişkende depolanan ülke kodunu temel alarak yükleyebilirim? Ben değişken değerine bağlı olarak sınıf yüklemek için birlik nasıl kullanabilirim

public interface IShip 
    { 
     string Ship(); 
    } 

    public class UPS : IShip 
    { 
     public string Ship() 
     { 
     } 
    } 

    public class FedEX : IShip 
    { 
     public string Ship() 
     { 
     } 

    } 

    public class Purolator : IShip 
    { 
     public string Ship() 
     { 
     } 

    } 

:

bu benim örnek veya önerilen sınıf tasarımdır varsayalım.

GB değişken olarak depolanırsa ve UPS sınıfını yüklemek ve gemi işlevini çağırmak istiyorsam ne olur?

Diyelim ki FR değişkende saklanıyor ve UPS sınıfını yüklemek ve gemi işlevini çağırmak istiyorum?

US değişkende saklanıyorsa ve FedEx sınıfını yüklemek ve gemi işlevini çağırmak ister miyiz?

Diyelim ki CA değişkendedir ve Purolator sınıfını yüklemek ve gemi işlevini çağırmak ister misiniz?

+0

Eğer IShip ait tüketen kodu gösterebilir misin? –

+0

sınıf tasarımım benim düşüncemden. kod başlatılmamış. Unity DI'yi hangi yük sınıfının dinamik olarak kullanarak çalışma zamanında verilen ülke koduna bağlı olarak kullanmayı öğrenmek istiyorum. – Thomas

+0

Arabirim ile birden çok uygulamanın adlandırılmış kaydını kullanın. Benzer [burada cevaplayın] (http://stackoverflow.com/a/23669951/881798). – vendettamit

cevap

2

Sen durumuna bağlı olarak ada göre sınıfları kayıt ve bunları çözebilirsiniz:

container.RegisterType<IShip, UPS>("UPS"); 
container.RegisterType<IShip, FedEX>("FedEX"); 
container.RegisterType<IShip, Purolator>("Purolator"); 

public IShip GetShippment(string c) 
{ 

    if (c == "GB" || c == "FR") 
     return container.Resolve<IShip>("UPS"); 

    if (c == "US") 
     return container.Resolve<IShip>("FedEX"); 

    if (c == "CA") 
     return container.Resolve<IShip>("Purolator"); 

    throw new NotImplementedException(); 
} 
... 
var shippment = GetShippment("CA"); 
shippment.Ship(); 
+0

kodunuz için teşekkürler ama doğru gemi fonksiyonunu nasıl arayacağınızı göstermediniz .................................................................. Teşekkürler – Thomas

+0

@Thomas sadece 'Ship' – Backs

+0

yöntemini çağırıp kodunuzu test edip bilelim. çok teşekkürler :) – Thomas

İlgili konular