C# 在MVC中注入数据库上下文

C# 在MVC中注入数据库上下文,c#,asp.net-mvc,entity-framework,light-inject,C#,Asp.net Mvc,Entity Framework,Light Inject,我开始在MVC应用程序中使用LightInject,但对于如何实现DB上下文类的实例,我有点困惑 我知道我可以通过构造函数注入它。。。但如果我必须这么做,那又有什么意义呢 此外,我的应用程序中的DB Context类已经实现了一个接口(IdentityDbContext),因此为存储库创建另一个接口似乎并不正确 DB上下文类在构造函数中确实包含以下内容: public static ApplicationDbContext Create() { return ne

我开始在MVC应用程序中使用LightInject,但对于如何实现DB上下文类的实例,我有点困惑

我知道我可以通过构造函数注入它。。。但如果我必须这么做,那又有什么意义呢

此外,我的应用程序中的DB Context类已经实现了一个接口(IdentityDbContext),因此为存储库创建另一个接口似乎并不正确

DB上下文类在构造函数中确实包含以下内容:

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
所以我可以很容易地打电话给:

 _context.Create()
在构造器中——但我的理解是,这违背了坚实的原则


那么如何使用LightInject创建数据库上下文类的实例呢?

您可以注册上下文,然后使用构造函数注入传递它:

在ioc配置文件中:

container.Register<Context, Context>(new PerScopeLifetime());

如果你想使用一个接口,那么注册一个接口并将其传递到你想要的任何地方。

太棒了,我没意识到我仍然可以在构造函数中添加依赖项-这让一切变得简单多了!嗨@Vsevolod,这个线程安全吗?我想知道如果有多人在BookService中调用异步函数,他们会得到自己的上下文吗?@dalcam很难说(我已经有一段时间没有使用c了),但这取决于在IoC中注册的对象的生存期
private readonly Context _context;

public BookService(Context context)
{
    _context = context;
}