C#2008
我一直在研究这个问题,我仍然对一些问题感到困惑.我的问题如下
我知道如果你处理非托管资源,你只需要一个终结器.但是,如果您使用托管资源来调用非托管资源,您是否仍需要实现终结器?
但是,如果您开发一个不直接或间接使用任何非托管资源的类,您是否可以实现IDisposable该类,以便您的类的客户端可以使用'using statement'?
是否可以接受实现IDisposable,以便您的类的客户端可以使用using语句?
using(myClass objClass = new myClass())
{
// Do stuff here
}
Run Code Online (Sandbox Code Playgroud)我在下面开发了这个简单的代码来演示Finalize/dispose模式:
public class NoGateway : IDisposable
{
private WebClient wc = null;
public NoGateway()
{
wc = new WebClient();
wc.DownloadStringCompleted += wc_DownloadStringCompleted;
}
// Start the Async call to find if NoGateway is true or false
public void NoGatewayStatus()
{
// Start the Async's download
// Do other work here
wc.DownloadStringAsync(new Uri(www.xxxx.xxx));
}
private void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
// …Run Code Online (Sandbox Code Playgroud)我完成了建议的步骤,将Ninject添加到我的MVC应用程序中.我向DbContext控制器的构造函数添加了一个参数.
控制器:
public class MyController : BaseController
{
public ArticlesController(MyDbContext context)
: base(context)
{ }
}
Run Code Online (Sandbox Code Playgroud)
基础控制器:
public class BaseController : Controller
{
protected DbContext MyDbContext;
public BaseController(MyDbContext context)
{
MyDbContext = context;
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎运作良好.但是请给我一些问题.
Ninject能否确保我DbContext的清理和及时处理?
我为所有应用程序的控制器创建了一个基类来处理任何常见的初始化等.基类DbContext在构造函数中接受我的参数的实例.但这需要我也将此参数添加到我的应用程序中的每个控制器.有没有办法不要求这个?
我不确定创建一个我的实例是多么昂贵DbContext.是否有任何方法可以进行优化,只有在请求实际要求我访问数据库时才会创建它.