2011-07-30 44 views
1

我正在計劃在azure和im上編寫一個web應用程序有一個問題... 對於發送電子郵件我使用我前段時間寫的類庫,我的電子郵件模板一個xlst文件,每次我想發送一封電子郵件時,我都會創建一個包含我想要包含在電子郵件中的信息的對象,然後將該對象序列化爲xml,並使用xlst文件將其轉換爲HTML格式的電子郵件。在Windows Azure中解析xlst文件的路徑

這對我很好,我想在我的Azure網絡應用程序中使用它。我有的問題是,我如何找到xlst文件?我應該在屬性標籤中將它標記爲「內容」嗎?我怎樣才能訪問它?

由於提前, 胡安

回答

1

正如smarx已經指出的那樣,Server.MapPath將工作,如果你有文件上傳部署和應用程序沒有改變。

在我們的應用程序中,我們使用dependency injection來解決這個問題。在類庫中,我們將定義一個接口,例如ITemplateRepository沒有實施。在需要類庫的項目中,創建該接口的實現,並且因爲這是在Web應用程序中,您可以安全地使用Server.MapPath,或者轉到Azure blob存儲或基本上執行其他任何操作。

雖然我們使用DI我們根本構造看起來像這樣的:

public TemplatedMailService(ITemplateRepository repo) { 
    this._repo = repo; 
} 

如果不使用DI容器,你可以這樣做:

var myService = new ClassLibrary.TemplatedMailService(new WebProject.ServerStoragezrepository()); 

這將是最可擴展的方式。但也看看DI。

+0

請注意,如果您希望用戶能夠指定自定義模板,那麼存儲庫將同時需要Get和Put方法。但在這種情況下,您不應該使用本地文件夾結構來執行此操作,而應該使用Azure Blob存儲。 –

1

是,這標誌着該文件爲「內容」,然後通過發現使用Server.Mappath它(「〜/ whatever.xslt」)應該工作的罰款。 (這大概是你在正常的網絡應用程序中所做的,對吧?)

+0

我想要在類庫中發送電子郵件的類....如果我想要某種可重用的東西,那不是正確的解決方案嗎?我的意思是,在一個普通的服務器上,我可以擁有xslt文件所在文件夾的絕對路徑。但在這裏,它將如何工作?如果我使用Server.MapPath,它可以用於網站,但不適用於工作人員角色......對吧? – Juan

+0

那麼,文件必須去某個地方。在普通的服務器上,你是說你只需要硬編碼一個路徑?你將如何首先獲得文件?當然,如果它始終是同一個文件,那麼可以將其作爲類庫的資源。 – smarx