2010-12-30 46 views
5

Nếu chúng tôi khai báo biến số static trong Global.asax thì làm thế nào để truy cập vào một trang ASP.NET?Cách truy cập thành viên tĩnh Global.asax?

<script runat=server"> 

    public static object myObject = new MyClass(); 

    // Application_Start() and other stuff goes here. 

</script> 

Và, đây có phải là ý tưởng hay để lưu trữ đối tượng chung (cùng một trường hợp cho tất cả yêu cầu) không?

+0

Câu hỏi hay, giả sử bạn luôn khởi tạo lại đối tượng trong Application_Start(). Không thể tìm thấy biến số –

+0

'tĩnh' mặc dù' asp.net' cho phép khai báo. Nếu chúng ta biết mã hóa bên trong bản đồ 'Global.asax' tới lớp nào thì chúng ta có thể truy cập biến đó. – Xaqron

+0

Đó là loại âm thanh như bạn đang đi về điều này hoàn toàn ngược, Xaqron. Có thể nếu bạn đăng câu hỏi "hình ảnh lớn hơn", bạn sẽ nhận được câu trả lời thỏa đáng hơn. – Greg

Trả lời

0

Nó có thể tốt hơn để tạo đối tượng của bạn như một singleton thay vì đặt nó như là một đối tượng "toàn cầu". Khởi tạo nó trong ứng dụng bắt đầu, và phá hủy nó trong ứng dụng kết thúc. Miễn là bạn không cần nó để được trên các trang trại, bạn đang khá an toàn.

Xem bài đăng này và nhận xét của bài đăng này.

http://weblogs.asp.net/jeff/archive/2007/09/21/how-do-you-get-a-true-singleton-in-an-asp-net-app.aspx

4

myObject nên có sẵn cho tất cả các phương pháp trong global.asax và bên trong các trang ASP.NET của bạn sử dụng

Global.myObject 
+0

Tôi sẽ sử dụng nó bên trong 'HttpHandler' để tôi có quyền truy cập vào' HttpContext' nhưng nó không có ở đó. – Xaqron

+0

bạn có thể làm điều đó nhưng chỉ khác một chút đối với những người xử lý. xem câu trả lời này http://bit.ly/eT4E71 – phillip

+1

@philip: Vui lòng không sử dụng công cụ rút gọn URL trên stackoverflow. Sử dụng url đầy đủ hoặc sử dụng '[Url Title] (http://www.example.com/address)'. – Brian

0

Cá nhân, tôi sẽ mạnh mẽ bỏ phiếu chống lại sử dụng các biến toàn cầu trong ASP.NET. Tôi đã có những trải nghiệm tồi tệ một vài năm trước.

Bạn nên đồng bộ hóa quyền truy cập vào các thành viên trong trường hợp toàn cầu MyClass của bạn để đảm bảo nó hoạt động chính xác trong trường hợp đa luồng (có khả năng/bắt buộc nếu có nhiều yêu cầu).

Ngoài ra còn có ApplicationState mà bạn có thể sử dụng, according to Microsoft, you shouldn't.

+1

nếu không thay đổi, bạn có thể sử dụng nó – Omu

0

toàn cầu không được định nghĩa mà làm việc cho tôi:

ASP.global_asax dụ

ASP.global_asax.DefaultModel.GetTable ("Thẻ");

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