回答

2
ObjectFactory.Configure(cfg => cfg.AddRegistry(new MyRegistry())); 
ControllerBuilder.Current.SetControllerFactory(new StructureMapControllerFactory()); 

//Configure FV to use StructureMap 
var factory = new StructureMapValidatorFactory(); 

//Tell MVC to use FV for validation 
ModelValidatorProviders.Providers.Add(new FluentValidationModelValidatorProvider(factory)); 
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 

public class StructureMapValidatorFactory : ValidatorFactoryBase 
{ 
public override IValidator CreateInstance(Type validatorType) 
{ 
    return ObjectFactory.TryGetInstance(validatorType) as IValidator; 
} 
} 


public class MyRegistry : Registry 
{ 
public MyRegistry() 
{ 
    AssemblyScanner.FindValidatorsInAssemblyContaining<LiveReport.Domain.Validation.PersonValidator>() 
     .ForEach(result => 
     { 
      For(result.InterfaceType) 
      .Singleton() 
      .Use(result.ValidatorType); 
     }); 

} 
} 
+0

请注意指定Singleton时要小心。如果验证程序调用数据库,那么它使用的连接可能会在此期间被处理掉。 –

+0

@ vartan-arabyan,我应该注册我的所有viewmodels(超过100个在我的项目中)个人吗?天哪!请说不? –