Có thể sử dụng các loại không thay đổi làm thuộc tính cấu hình với API cấu hình của .NET không?Các loại không thể thay đổi làm thuộc tính cấu hình
Hãy nói rằng tôi có một loại bất biến gọi là MyClass:
public class ImmutableClass
{
private readonly int value;
public ImmutableClass(int value)
{
this.value = value;
}
public int Value
{
get { return this.value; }
}
}
Tôi muốn sử dụng loại này như một thuộc tính cấu hình trong một ConfigurationSection:
public class MyConfigurationSection : ConfigurationSection
{
[ConfigurationProperty("foo")]
public ImmutableClass Foo
{
get { return (ImmutableClass)base["foo"]; }
set { base["foo"] = value; }
}
}
Khi tôi làm điều này, tôi có thể 's serialize và deserialize MyConfigurationSection vì nó ném ngoại lệ này:
System.Configurati on.ConfigurationErrorsException: Không thể chuyển đổi giá trị của tiêu chí 'thuộc tính' thành chuỗi. Lỗi là: Không thể tìm thấy trình chuyển đổi hỗ trợ chuyển đổi thành/từ chuỗi cho tiêu chí 'thuộc tính' của loại 'Tìm tiêu đề'.
Nếu tôi lấy ImmutableClass từ ConfigurationElement, tôi nhận được ngoại lệ này khi tôi cố gắng để serialize và deserialize phần cấu hình:
System.Reflection.TargetInvocationException: ngoại lệ đã được ném bởi mục tiêu của một invocation . ---> System.Reflection.TargetInvocationException: Ngoại lệ đã được ném bởi mục tiêu của một lời gọi. ---> System.MissingMethodException: Không có hàm tạo tham số nào được định nghĩa cho đối tượng này.
Tôi có toàn quyền kiểm soát ImmutableClass, vì vậy tôi có thể triển khai bất kỳ giao diện nào là cần thiết.
Có cách nào tôi có thể móc vào API cấu hình để ImmutableClass có thể được sử dụng theo cách này không?
+1. Cảm ơn, mà làm việc tốt. Tôi đồng ý rằng trong hầu hết các trường hợp, chỉ cần đi với dòng chảy sẽ dễ dàng hơn, và đó cũng là điều tôi thường làm, nhưng đây là trường hợp đặc biệt ... –
Điều cần biết ... Tôi thực sự đang thử nghiệm với các loại bất biến và xaml tuần tự hóa. Tôi hy vọng các trình biến đổi kiểu sẽ làm việc cho tôi! – Will