如何在C#中实现对自定义函数的处理?

PCG*_*PCG 0 c# dispose

我有下面列出的示例类,每次调用API时,都需要使用CreateDataConnection()打开数据库连接。

public class FlowerController : ApiController
    {
        DataConnection oDataConnection { get; set; }
        public void CreateDataConnection() 
        {
            ConnectionParameters oParams = new ConnectionParameters();

            oParams.strDatabaseName = "123123123123";
            oParams.strPassword = "123123123123";  
            oParams.strSchemaName = "123123123123";
            oParams.strServerIP = "192.168.1.1";
            oParams.strServerPort = "12313";
            oParams.strUsername = "123123123";
            oDataConnection = new DataConnection(oParams);
        }

        [HttpPost]
        [AllowAnonymous]
        [Route("api/flower/Activate")]
        public DBStatus Activate(W_Flower oFlower)
        {
            CreateDataConnection();
            DBStatus result = oDataConnection.Activate(oFlower);
            return result;
        }
}
Run Code Online (Sandbox Code Playgroud)

我想如下实现Activate API

public DBStatus Activate(W_Flower oFlower)
{
   using (CreateDataConnection())
   {
       DBStatus result = oDataConnection.Activate(oFlower);
   }
   return result;
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,因为我在CreateDataConnection中没有dispose方法。我如何在这里实施处置?我以前没有做过这种方法。

Lua*_*aan 8

更改CreateDataConnection返回新创建的连接,

public DataConnection CreateDataConnection() {
    ConnectionParameters oParams = new ConnectionParameters();

    oParams.strDatabaseName = "123123123123";
    oParams.strPassword = "123123123123";  
    oParams.strSchemaName = "123123123123";
    oParams.strServerIP = "192.168.1.1";
    oParams.strServerPort = "12313";
    oParams.strUsername = "123123123";
    return new DataConnection(oParams);
}
Run Code Online (Sandbox Code Playgroud)

而不是将其存储在属性中。

那你就可以做

public DBStatus Activate(W_Flower oFlower) {
   using (var connection = CreateDataConnection()) {
       return connection.Activate(oFlower);
   }
}
Run Code Online (Sandbox Code Playgroud)