unity mvc3 - 使用数据库第一种方法进行配置

时间:2012-03-07 01:32:08

标签: asp.net-mvc-3 entity-framework-4 unity-container

我一直在检查Microsot Unity IOC并找到一些使用Code First方法的例子。另一方面,我找不到任何教程或配置,以便使用数据库第一种方法将Unity IoC包含在edmx文件中。我很高兴任何人都能对此有所了解。

我尝试使用http://unitymvc3.codeplex.com/并使用unity 2.1直接= http://unity.codeplex.com/

抱歉,我无法提供代码,但我对IOC模式非常困惑,而且我无法生成演示解决方案。 brgds。

1 个答案:

答案 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#上下文类。单击曲面并查看属性以查看类的名称。

enter image description here

因此,您可以以与任何其他类完全相同的方式注册它。在这种情况下。

container.RegisterType<Model1Container, Model1Container>();

希望这有帮助。