我在ASP.NET MVC應用程序中有一個靜態輔助方法。以下是一些演示問題的示例代碼(實際代碼稍微複雜一些)。請關注該模式。實際的代碼不會與數據庫交互。靜態方法和服務定位器
下面的代碼被抽象爲允許進行單元測試。我遇到的問題是獲取IDatabaseManager的具體實現。使用服務定位器不好?任何關於良好實踐的建議?我已經讀過服務定位器是反模式。請指教。代碼中的所有其他地方都使用依賴注入(這裏的問題顯然是靜態的DataWriter方法)。
public static class DataWriter {
public static void WriteDate() {
var datetime = DateTime.Now.ToString();
//Is this service locator a bad pattern?
var databaseManager = StructureMap.ObjectFactory.Container.GetInstance<IDatabaseManager>();
var dataRepository = new DataRepository(databaseManager);
dataRepository.Write(datetime);
}
}
public class DatabaseManager : IDatabaseManager {
public void Write(string s) {
//Write to database
}
//Other methods
...
...
}
public interface IDatabaseManager {
void Write(string s);
//Other signatures
...
...
}
public class DataRepository : IDataRepository {
private IDatabaseManager _databaseManager;
public DataRepository(IDatabaseManager databaseManager) {
_databaseManager = databaseManager;
}
public void Write(string data) {
_databaseManager.Write(data);
}
}
public interface IDataRepository {
void Write(string data);
}
根據Alex的建議進行編輯。再次 編輯刪除有關CSHTML的信息(因爲這是不是問題的重點)
*寫作*數據庫從CSHTML如此多的爭議,我不會擔心它除了使用服務定位器。附註:你可能想重申你的問題(也許你的意思是「我應該使用服務定位器」,因爲你的樣本確實使用它)。 –
問題不在於寫入數據庫。實際的代碼不會寫入或與數據庫交互。這是證明問題的僞代碼。同樣,我的問題是我正在使用服務定位器,但我應該首先使用它。我正在要求爲什麼這是不好的建議。 – rkrauter