2010-10-15 30 views
8

Tôi muốn chuyển đối số cho hàm tạo của trình tạo tùy chỉnh, vì vậy tôi đoán tôi phải ghi đè cơ chế khởi tạo của Trình khởi tạo. Vấn đề là tôi không thể tìm thấy, trong các tài liệu, một cách để móc nó lên, và nó làm cho tôi nghĩ rằng nó không thể (hoặc các tài liệu không đầy đủ).Tôi có thể chuyển đối số cho một hàm tạo của trình tạo log4net tùy chỉnh không?

Đối với phiên bản 1.2.10, điều này là không thể nếu không sửa đổi mã nguồn. Các phần có liên quan là trong Repository\Hierarchy\XmlHierarchyConfigurator.cs:L286:

IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName, true, true)); 

Như bạn có thể thấy, nó nên sử dụng quá tải này (hoặc một cái gì đó trên đường đi đó) để cho phép tôi để đạt được nhu cầu của tôi.

Activator.CreateInstance(Type, Object[]) 

Trả lời

4

Tôi không chắc chắn nếu tôi hiểu mục tiêu của bạn, nhưng nếu bạn muốn appender của bạn được cấu hình về cơ bản bạn có để lộ một tài sản trên appender của bạn. Sau đó, bạn có thể đặt thuộc tính này theo lập trình hoặc trong tệp cấu hình.

Các UdpAppender cho thấy một tài sản như thế này:

public int LocalPort 
{ 
    get; set; 
} 

(Nó thực sự là một chút phức tạp hơn khi họ kiểm tra xem giá trị trong setter là một cổng hợp lệ.)

Trong tập tin cấu hình bạn sử dụng nó như thế này:

<localPort value="8080" /> 

Điều này hoạt động rất tốt cho các loại đơn giản như chuỗi, int ... mà còn đối với một số loại phức tạp như IPAddress. Nếu bạn có loại của riêng bạn thì nó sẽ khó khăn hơn để làm cho nó hoạt động và tôi sẽ phải kiểm tra đầu tiên như thế nào điều này được thực hiện.

+2

Stefan, vấn đề chính xác là bạn viết vào cuối: Tôi phải cung cấp một đối tượng phức tạp mà nó được khởi tạo trong thời gian chạy. Không có cách nào để cung cấp thông qua cấu hình XML. – Simone

+0

Bạn không thể tạo một thể hiện của lớp này dựa trên một số chuỗi tham số? –

+0

Không, tôi phải vượt qua một đối tượng hiện có khác. – Simone

1

Đối với phiên bản 1.2.10, điều này là không thể nếu không sửa đổi mã nguồn.

Các phần có liên quan là trong Repository \ Hierarchy \ XmlHierarchyConfigurator.cs tại dòng 286:

`IAppender appender = (IAppender)Activator.CreateInstance(SystemInfo.GetTypeFromString(typeName, true, true));` 

Như bạn có thể thấy, nó nên sử dụng

Activator.CreateInstance(Type, Object[])
quá tải (hoặc một cái gì đó trên đường đi đó) để cho phép tôi để đạt được của tôi nhu cầu.

+0

Trừ khi bạn nói rằng câu trả lời là "không thể", câu trả lời "" này có vẻ là thông tin thêm cho câu hỏi ... –

Các vấn đề liên quan