我正在关注本教程: http://blog.johanneshoppe.de/2010/10/walkthrough-ado-net-unit-testable-repository-generator/
我有这个问题: MVC3 & EF. Interface for TDD
但是,现在我设置了界面(由于项目限制,我没有使用ninject)
我在这里得到一个空错误;
`Public partial class MyEntitiesRepository : MyEntitiesRepository
{
public IEnumerable<userdetails> getAlluserDetails()
{
return this.Context.userDetails.ToList();
}`
上下文为空。我使用与教程完全相同的结构。
调用它的MVC控制器中的标题是: `
[HandleError]
public class HomeController : Controller
{
private MyEntitiesRepository _repository;
...
...
public HomeController() : this(new externalEntities(), new MyEntitiesRepository ()){}
public HomeController(externalEntities external, MyEntitiesRepository repository)
{
_repository = repository;
_ContextExt = external;
}
`
编辑:
上下文来自:
[System.CodeDom.Compiler.GeneratedCode("ADO.NET Unit Testable Repository Generator", "0.5")]
public partial class MyEntitiesRepository
{
/// <summary>
/// Gets or sets the specialised object context
/// </summary>
/// <value>object context</value>
#if !DO_NOT_USE_UNITY
[Dependency]
#endif
public IMyEntities Context { get; set; }
}
}
答案 0 :(得分:3)
我猜测在示例中他们在构造函数中传递了Context。他们可以这样做,因为他们正在使用依赖注入,它将为您创建该实例。由于您没有使用Ninject,因此您很可能需要自己构建此Context。
如果您无法使用Ninject或任何其他IoC容器,那么您需要做得更好,说服您的老板让您。如果他们仍然不让你那么你可以做穷人的依赖注射我想:
public class MyEntitiesRepository
{
private MyDbContext context;
public MyEntitiesRepository() : this(new MyDbContext())
{ }
public MyEntitiesRepository(MyDbContext context)
{
this.context = context;
}
}
这比我想的更好吗?
答案 1 :(得分:1)
看到编辑(Dependency
属性)我猜你所指的项目限制是使用Microsoft's Unity代替Ninject。
现在您可以使用或不使用Unity来解决您的问题。从后者开始:稍微调整HomeController
和MyEntitiesRepository
类:
public HomeController() :
this(new externalEntities(),
new MyEntitiesRepository (new MyEntities()))
{
}
public HomeController(externalEntities external, MyEntitiesRepository repository)
{
_repository = repository;
_ContextExt = external;
}
public partial class MyEntitiesRepository
{
public MyEntitiesRepository(IMyEntities context)
{
this.Context = context;
}
public IMyEntities Context { get; private set; }
}
在这里,我假设你有一个实现接口MyEntities
的课程IMyEntities
。
你也可以使用Unity。为了更好地了解该框架,您可以从MSDN开始。我对Unity没有任何经验,但我注意到的一些事情是您需要使用MyEntityRepository
对象创建UnityContainer
:
IUnityContainer container = new UnityContainer();
...
MyEntityRepository repository = container.Resolve<MyEntityRepository>();
在此之前,您需要注册MyEntities
到IMyEntities
的映射:
container.RegisterType<IMyEntities, MyEntities>();
如果您选择尝试Unity,我建议您尝试一下,如果您遇到问题,可以提出一个新问题。