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#
Trả lời
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ự
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
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
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
đ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ộ –
Đã bỏ phiếu xuống vì câu hỏi không phải là về ASP.NET. – StefanLundmark
Bạn đang tìm kiếm một initializer module, mà không được hỗ trợ bởi C#. – SLaks
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
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