Orada nesneler Dİ bir kap ile yaratılan başlatma için bir kalıptır
Birlik benim nesneleri oluşturulmasını yönetmek için çalışıyorum ve çalıştırma kadar bilinen bazı başlatma parametrelerini vermek istiyorum:
Şu anda bunu yapmanın yolu düşünebildiğim tek yolu arabirimi Init yöntemi.
interface IMyIntf {
void Initialize(string runTimeParam);
string RunTimeParam { get; }
}
Daha sonra kullanmak için (Birlik) bunu yapmak istiyorum:
var IMyIntf = unityContainer.Resolve<IMyIntf>();
IMyIntf.Initialize("somevalue");
Bu senaryoda runTimeParam
param kullanıcı girişi dayalı çalışma zamanında belirlenir. Önemsiz durumda burada sadece runTimeParam
değerini döndürür ama gerçekte parametre dosya ve başlatma yöntemi dosyası ile bir şeyler yapacak gibi bir şey olacak.
Bu Initialize
yöntemi arabirim üzerinde kullanılabilir ve birden çok kez çağrılabilir konularda bir dizi, yani oluşturur. Uygulamasında bir bayrak ayarı Initialize
tekrar çağrı istisna atma yolu aksak görünüyor.
Ben arayüzü gidermek noktada IMyIntf
uygulama hakkında hiçbir şey bilmek istemiyorum. Ne de olsa, bu arayüz bir kez başlatma belirli parametreleri gereken bilgi istiyorum. Orada bir şekilde bir şekilde açıklamak(öznitelikler?) bu bilgi ile arabirim ve nesne oluşturulduğunda çerçeve alacağım?
Edit: biraz daha fazla. arayüzü Açıklanan
CEVAP
İhtiyacınız olan herhangi bir yerde çalıştırma, belirli bir bağımlılık oluşturmak için değerSoyut Fabrikaçözüm.
Arabirimler üzerinde olması Başlatma yöntemleri bir kokusu varSızıntılı Soyutlama.
Sizin durumunuzda üzerinde İMyİntf arayüzü modeli gerektiğini söyleyebilirimnasıl kullanmak gerekir- nasıl bunların uygulamaları oluşturmak için niyet. Bu uygulama ayrıntı.
Böylece, Arayüzü Basit olmalıdır:
public interface IMyIntf
{
string RunTimeParam { get; }
}
Şimdi Soyut Fabrika tanımlayın:
public interface IMyIntfFactory
{
IMyIntf Create(string runTimeParam);
}
Şimdi bunun gibi İMyİntf somut örneğini oluşturan İMyİntfFactory somut bir uygulama oluşturabilirsiniz:
public class MyIntf : IMyIntf
{
private readonly string runTimeParam;
public MyIntf(string runTimeParam)
{
if(runTimeParam == null)
{
throw new ArgumentNullException("runTimeParam");
}
this.runTimeParam = runTimeParam;
}
public string RunTimeParam
{
get { return this.runTimeParam; }
}
}
Bu bize izin verir nasıl dikkat edinsınıf değişmezler . korumak readonly
anahtar kelime kullanarak. Hayır kokulu Başlatma yöntemleri gereklidir.
İMyİntfFactory bir uygulama bu kadar basit olabilir:
public class MyIntfFactory : IMyIntfFactory
{
public IMyIntf Create(string runTimeParam)
{
return new MyIntf(runTimeParam);
}
}
İMyİntf örneğine ihtiyacınız olan tüm tüketiciler, sadece içinden isteyerek İMyİntfFactory bir bağımlılıkYapıcı Enjeksiyon.
Tuz eğer doğru bir şekilde kayıt varsa Otomatik Tel sizin için İMyİntfFactory bir örneği olacaktır değerinde herhangi bir Dİ Konteyner.
Nasıl özel nesneler ile bir NSMutableA...
Orada https:// github kullanırken şifr...
Orada C sayılarını oluşturmak için kol...
Fasulye başlatma tamamlandıktan sonra ...
Orada Windows kedi için yedek....