嘗試NConcern AOP Framework
這個新的最低運行時的AOP框架(關於這一點我積極工作)可以幫助你通過AOP來管理驗證沒有聯軸器域裝配。
在您的驗證程序集中,定義您自己的驗證屬性以及如何驗證它。
自定義屬性來定義/識別電子郵件
[AttributeUsage(AttributeTargets.Property)]
public class Email : Attribute
{
//validation method to use for email checking
static public void Validate(string value)
{
//if value is not a valid email, throw an exception!
}
}
驗證方面,檢查合同代碼
//Validation aspect handle all my validation custom attribute (here only email)
public class EmailValidation : IAspect
{
public IEnumerable<IAdvice> Advise(MethodInfo method)
{
yield return Advice.Before((instance, arguments) =>
{
foreach (var argument in arguments)
{
if (argument == null) { continue; }
Email.Validate(argument.ToString());
}
});
}
}
你的域裝配
public class Customer
{
[Email]
public string Login { get; set; }
}
在另外一個組件(驗證之間的聯繫和域
//attach validation to Customer class.
foreach (var property in typeof(Customer).GetProperties())
{
if (property.IsDefined(typeof(Email), true))
{
Aspect.Weave<Validation>(property.GetSetMethod(true));
}
}
驗證何時需要進行?當@ setter,是的,你應該使用AOP。你可以看看Fody(https://github.com/Fody/Fody),它是免費的..也許這會減少你對耦合到基礎設施組件的顧慮。無論如何,我必須問:你願意有更多的代碼併爲它付出代價,而且它一次又一次的維護,還是你更願意依靠基礎架構組件,加速開發並減少漏洞的機會?什麼是基礎架構組件,哪些不是?你是否依賴VS,或者你是否使用(任何)文本編輯器,因爲耦合讓你感到困擾? ;-) – BatteryBackupUnit