所有IoC容器是相同的,他们有一些方法来注册或发现依赖关系,然后解决参考的方式。大多数决议涉及要求参考FooClass
并获得一个对象作为回报。通常你并不真正要求具体的类型,如FooClass,而是要求IFooClass
,以便将你的使用与传入的实际类型分开。
所以在你的情况下,你需要注册你的EF数据上下文作为统一的依赖。我之前没有使用过统一,所以请原谅任何小错误。
container.RegisterType<YourContext, YourContext>();
给你的类添加一个依赖项。假设你有一个实现IFooRepository的FooRepository。
public FooRepository : IFooRepository
{
private YourContext context;
public FooRepository(YourDataContext context) {
this.context = context;
}
}
在MVC 3您注册统一为默认依赖解析器,这意味着用于控制器通过它被送到所有的请求;现在
protected void Application_Start()
{
...
var container = new UnityContainer();
container.RegisterType<YourContext, YourContext>();
container.RegisterType<IFooRepository, FooRepository>();
container.RegisterControllers();
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
控制器可以添加参数到它的构造函数,并让他们填充。
public class MyController : Controller
{
private IFooRepository repository;
public MyController(IFooRepository repository) {
this.repository = repository;
}
}
当这个控制器实例化它会收到IFooRepository的一个实例,将接收到YourContext参考。这一直贯穿整个链条。
编辑
的EDMX文件就是创建覆盖下一个C#上下文类设计师。单击曲面并查看属性以查看类的名称。
所以,你可以以完全相同的方式与任何其他类对其进行注册。在这种情况下。
container.RegisterType<Model1Container, Model1Container>();
希望这会有所帮助。
嗨@Madcapnmckay感谢您的回答。我有一个问题,我不知道如何将我的edmx文件注册为container.registertype()。我为我的所有IFooclass和Fooclass创建了这些container.registertype,但我不知道如何处理edmx表示。感谢您的帮助提前。 –
2012-03-07 02:30:43
@sebastian_h我编辑了包含更多细节的答案。 – madcapnmckay 2012-03-07 02:57:35
感谢您的编辑。我重新构建了解决方案,并在实体容器名称中包含了该图的名称,但未被intellisense识别出来......我将检查我是否做了其他错误,因为我相信您的方法是正确的路径,但我不知道为什么因为我的解决方案无法正常工作..我会再试一次并写信..非常感谢! – 2012-03-07 05:49:06