2013-11-30 15 views
7

'u uygulayan bir sınıf örneğinde Powershell'de bir özellik nasıl ayarlanır ADO.NET SQLite veri sağlayıcı kitaplığında here bulunan SQLiteConnectionStringBuilder sınıfı ile çalışıyorum çalışıyorum. Sınıf tanımının DataSource adlı bir özelliği vardır. Benim powershell komut dosyasında belirlenen çalışıyorumIDictionary ve ICollection

public sealed class SQLiteConnectionStringBuilder : DbConnectionStringBuilder 
{ 
    public SQLiteConnectionStringBuilder(); 
    public SQLiteConnectionStringBuilder(string connectionString); 

    public string DataSource { get; set; } 
} 

, yani:

$csb = new-object -TypeName System.Data.SQLite.SQLiteConnectionStringBuilder 
$csb.DataSource = "C:\data\mydb.db"; 

yaşıyorum sorun olduğunu aşağıdaki arabirimleri uygulayan DbConnectionStringBuilder den SQLiteConnectionStringBuilder devralır

public class DbConnectionStringBuilder : IDictionary, ICollection, IEnumerable, .... 

Sınıf, bu arabirimleri uyguladığı için Powershell, sınıftaki DataSource özelliğini ayarlamıyor, ancakdavranıyor 0 bir karma tablo olarak ve buna bir anahtar değer çifti ekleyerek key="DataSource", value="C:\data\mydb.db". Söylemeye gerek yok, istediğim bu değil. Peki şimdi ne yapıyorum? Powershell özelliği nasıl ayarlanır ve $ csb'yi bir karma tabloya dönüştürmez? Teşekkürler!

cevap

4

Eğer New-Object ait Property parametresini kullanarak bu mümkün nesne oluştururken bu set çalışıyorsanız: Bazı sonraki bir zamanda özelliğini ayarlayın çalışıyorsanız Ancak

$csb = New-Object -TypeName System.Data.SQLite.SQLiteConnectionStringBuilder -Property @{ DataSource = "C:\data\mydb.db" } 

, sadece yöntem sözdizimi Çalışması - - $ csb.set_DataSource

$csb.GetType().GetProperty("DataSource").SetValue($csb, "C:\data\mydb.db") 
+2

Yansıma gerekli değildir ("C: \ data \ mydb.db") bulduğum yolu NET Reflection API kullanarak, biraz sakar –

İlgili konular