我一直在检查Microsot Unity IOC并找到一些使用Code First方法的例子。另一方面,我找不到任何教程或配置,以便使用数据库第一种方法将Unity IoC包含在edmx文件中。我很高兴任何人都能对此有所了解。
我尝试使用http://unitymvc3.codeplex.com/并使用unity 2.1直接= http://unity.codeplex.com/
抱歉,我无法提供代码,但我对IOC模式非常困惑,而且我无法生成演示解决方案。 brgds。答案 0 :(得分:3)
IoC只是将对象内部转换为内部,而不是包含对象(依赖项)的内部硬引用,而是从外部将相同的对象传递给它。内向外转是反转控制,注入所需的对象是依赖注入,通常是你的容器(统一)。
所有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中,您将unity注册为默认依赖项解析器,这意味着所有对控制器的请求都通过它进行注册;
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>();
希望这有帮助。