2 回答
TA贡献1806条经验 获得超8个赞
我可以想到将 DbContext 放入其他类的三种方法。
您的控制器可以获取依赖项并将其传递给其他类。这不是很优雅,现在你的控制器必须包含很多样板来传递与它没有直接关系的东西
使用服务定位器模式让类从 IoC 容器请求依赖项。这通常被认为是一种反模式
解决这个问题的最简洁的方法是让 IoC 容器实例化具有依赖项的类,以便它可以解析其依赖项。
以下是第 3 种方法的示例:
public class MyService : IMyService
{
readonly MyDbContext _context;
public MyService(MyDbContext context)
{
_context = context;
}
public void DoSomeWork()
{
//Now you can use the context here
}
}
public interface IMyService
{
void DoSomeWork();
}
public class MyController : Controller
{
readonly IMyService _myService;;
public MyController(IMyService myService)
{
_myService = myService;
}
}
//In your ConfigureServices method
services.AddDbContext<myContext>(options =>
{
options.UseSqlServer(Configuration.GetConnectionString("myContextConexionString"));
});
services.AddScoped<IMyService, MyService>();
通过遵循此模式,您的控制器无需了解 MyService 的依赖项。它只需要通过它的构造函数请求一个 IMyService,它就会收到一些已经完全解决所有依赖关系的东西。该视频更深入地介绍了这种模式。
TA贡献1872条经验 获得超3个赞
AddDbContext您在 Startup 中执行的调用将上下文添加到 IoC 容器。然后你可以要求 IoC 容器像这样将它注入你的控制器
public class MyController : Controller
{
private readonly myContext _context;
public MyController(myContext context)
{
_context = context;
}
}
然后使用它来访问您的数据。
- 2 回答
- 0 关注
- 253 浏览
添加回答
举报