5
我正在開發一個帶有asp.net mvc 3和DDD的Web應用程序。對於我的域模型驗證,我一直使用Fluent驗證。這是我的第一個流暢驗證項目,我仍然在學習和建模實體。Fluent驗證和IoC(唯一字段)
我的實體客戶有兩個屬性需要在我的系統中唯一,這些屬性是電子郵件和CPF(這是一個巴西文檔,需要在所有系統中都是唯一的)。我想知道,我該怎麼辦呢?
Soo,我的理念是,在我的Customer驗證類中注入(通過構造函數)我的存儲庫,並通過自定義驗證進行檢查。驗證將使用存儲庫進行檢查,如果在我的表中存在與此電子郵件不同的Id的記錄(插入爲0,更新爲真實Id)...我不需要檢查正在更新的記錄,因爲它' d總是如此)。
我真的想這樣的事情:
public class CustomerValidator : AbstractValidator<Customer> {
protected ICustomerRepository Repository { get; set; }
// I intend to inject it by IoC with Unity.. is it possible ?
public CustomerValidator(ICustomerRepository rep)
{
this.Repository = rep;
// other properties
RuleFor(customer = customer.Email)
.EmailAddress()
.NotEmpty()
.Must(email = { return Repository.IsEmailInUse(email, ?); });
RuleFor(customer = customer.CPF)
.NotEmpty()
.Must(cpf = { return Repository.IsCPFInUse(cpf, ?); });
} }
我不知道是否是可能的,注入驗證內部存儲庫,我怎麼能拿的Id的。必須擴展方法?還是有另一種方法來做到這一點?
感謝您的awser Darin,但您的評論導致我感到困惑。這個驗證應該在另一個地方嗎?在我的數據庫中,我有一些獨特的約束條件可以進行驗證,但我需要通過域模型和UI來阻止它,以避免出現異常,是嗎?此驗證類位於我的域的類庫項目中,是不是也適用?或者我應該做一個驗證層?我對DDD和概念瞭解不多,我正在努力學習...謝謝:) –
現在,它正在努力工作!謝謝! –