我在 mvc 3(steven sanderson Scaffolder)的存储库模式中使用 Ninject 3。
在ninject中,我有“NinjectWebCommon”类,在“RegisterServices”方法中我解决了依赖关系,我认为我准备好了。
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ICityRepository>().To<CityRepository>();
kernel.Bind<IVillageRepository >().To<VillageRepository>();
}
我使用构造函数注入在控制器中使用我的存储库,一切都很好。
public class CityController : Controller
{
private readonly ICityRepository cityRepository;
// If you are using Dependency Injection, you can delete the following constructor
//public CityController() : this(new CityRepository())
//{
//}
public CityController(ICityRepository cityRepository)
{
this.cityRepository = cityRepository;
}
// .........
}
但是当我在其他类(如使用属性注入或字段注入的模型(实体)类)中使用此存储库时,依赖项没有解决,并且我的属性或字段上出现空引用异常。
[MetadataType(typeof(CityMetadata))]
public partial class City : IValidatableObject
{
[Inject]
public IVillageRepository VillageRepo { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var village = VillageRepo.Find(5); // will throw null reference exception on "VillageRepo"
}
}
public partial class CityMetadata
{
[ScaffoldColumn(false)]
public int ID { get; set; }
[Required(ErrorMessage = MetadataErrorMessages.Required)]
[StringLength(50, ErrorMessage = MetadataErrorMessages.ExceedMaxLength)]
public string Name { get; set; }
}
我不知道为什么会这样。那么问题出在哪里,我如何在非控制器类中使用存储库?
提前致谢。