2011-04-09 36 views
1

正如標題所說,那麼我想訪問x。從一個讓,而不是一個成員。F# - >訪問x。從一個出發

以下工作:

type UploadController() = 
    inherit Controller() 

    member x.UploadPath 
     with get() = x.Server.MapPath "~/Uploads" 

但這:

type UploadController() = 
    inherit Controller() 

    let uploadPath = x.Server.MapPath "~/Uploads" 

拋出一個編譯器錯誤:

The namespace or module 'x' is not defined

不可能的任務?

+2

這個問題可能會更好,標題爲「我怎麼從類構造函數中訪問this'?」 – Brian 2011-04-10 17:13:20

回答

7

你可以這樣定義一個參考:

type UploadController() as x = 
    inherit Controller() 

    let uploadPath = x.Server.MapPath "~/Uploads" 
+0

那麼當我編譯並運行它時,它會拋出一個異常:「System.NullReferenceException:對象引用未設置爲對象的實例。」在聲明'uploadPath'的那一行? – ebb 2011-04-10 10:39:45

+0

我相信這是因爲MVC框架的工作原理。 在UploadController構造函數中調用upload upload代碼,這意味着MVC框架沒有時間將Server變量分配給您的控制器。 它看起來像這樣: var controller = new UploadController(); (你的邏輯在這裏觸發) controller.Server = SomeServerSettings; – justin 2011-04-10 14:27:40

4

ChaosPandion給予了普遍的答案,但它可能是你並不需要在特定情況下的自我標識。假設ServerController或其基類之一中定義,則可以使用base.而不是自標識符。這在F# docs中描述:

The keyword base is available in derived classes and refers to the base class instance. It is used like the self-identifier.

相關問題