2011-10-04 9 views
11

Tôi muốn thực thi mã nhất định trong thư viện lớp khi nó được khởi tạo từ một assembly khác. Có một điểm vào hoặc bootstrap cho một thư viện lớp học? Tôi nghĩ rằng một phương pháp tĩnh Chính sẽ làm các trick nhưng tôi đã sai. Ứng dụng cho việc này có thể là định cấu hình và khởi tạo một trình ghi nhật ký đơn lẻ, xử lý ngoại lệ chưa xử lý, v.v.Có tương đương với Application_Start cho thư viện lớp trong C#

+2

Bạn đang tìm kiếm một initializer module, mà không được hỗ trợ bởi C#. – SLaks

+1

Bạn có thể cung cấp một điểm vào trong thư viện lớp, nói rằng một nhà máy lớp tĩnh mà bạn phải gọi để nhận được bất kỳ cá thể hữu ích nào từ thư viện? Sau đó, bạn có thể thực hiện khởi tạo của bạn trên cuộc gọi đầu tiên đến nhà máy lớp tĩnh. – mellamokb

+0

Bạn không thể chỉ sử dụng một hàm tạo tĩnh của một số lớp mà bạn biết sẽ được nạp từ assembly đó? – svick

Trả lời

0

AppDomain.AssemblyLoad Event xảy ra khi lắp ráp được tải. Có lẽ nó có thể được sử dụng để gọi một phương thức khởi tạo trong thư viện lớp của bạn.

public static void Main() 
{ 
    AppDomain currentDomain = AppDomain.CurrentDomain; 
    currentDomain.AssemblyLoad += new AssemblyLoadEventHandler(MyAssemblyLoadEventHandler); 
} 

static void MyAssemblyLoadEventHandler(object sender, AssemblyLoadEventArgs args) 
{ 
     Console.WriteLine("ASSEMBLY LOADED: " + args.LoadedAssembly.FullName); 
     //If this is the assembly that you want to call an initialize method.. 
} 

Dưới đây là hai chủ đề tương tự

how to write class lib's assembly load/init event handler

.Net: Running code when assembly is loaded

+0

Bạn có chắc chắn sẽ hoạt động không? Tôi giả sử bạn sẽ đăng ký nó trong một constructor tĩnh. Nếu đó là trường hợp, tôi nghĩ rằng sự kiện sẽ cháy trước khi các nhà xây dựng tĩnh chạy. – svick

+0

Không quá chắc chắn theo thứ tự nào họ sẽ kích hoạt. Tuy nhiên, điều này có thể được sử dụng để đặt cờ trong ứng dụng hoặc để gọi phương thức khởi tạo trong thư viện lớp. – CharithJ

1

Bạn đã nhìn vào PreApplicationStartMethodAttribute?

using System.Web; 

[assembly: PreApplicationStartMethod(typeof(ClassLibrary.Startup), "Start")] 

namespace ClassLibrary 
{ 
    public class Startup 
    { 
     public static void Start() 
     { 
      // do some awesome stuff here! 
     } 
    } 
} 

Xem chi tiết: http://dochoffiday.com/professional/simulate-application-start-in-class-library

+3

điều này sẽ chỉ hoạt động trong ứng dụng asp.net và sẽ không hoạt động trong ngữ cảnh của dự án kiểm tra thư viện lớp học chẳng hạn. Không có gì về nó trong tài liệu, nhưng nó trở nên rõ ràng sau khi tôi thử điều này và khám phá Hỗ trợ để gọi các phương thức khởi đầu bên ngoài phần ASP.NET của [tài liệu WebActivator] (https://github.com/davidebbo/WebActivator/ blob/master/README.markdown) sử dụng 'PreApplicationStartMethodAttribute' nội bộ –

+2

Đã bỏ phiếu xuống vì câu hỏi không phải là về ASP.NET. – StefanLundmark