問題是我需要在一些句柄類和一些控制臺應用程式之間注入依賴項(建構式依賴項)。控制臺應用程式具有狀態isRunning,這顯然是 bool 變數。我可以從控制臺應用程式呼叫退出命令,然后就出現了問題。由于bool是值型別,當我們將它作為建構式引數傳遞給某個類,然后在該類中更改它的值時,控制臺應用程式的狀態不會改變。所以我需要注入依賴。我有這樣的代碼。
private static class Program
{
private static bool isRunning = true;
private static void Main(string[] args)
{
...
var exitHandler = new ExitHandler(isRunning);
do
{
exitHandler.Exit();
}
while (isRunning);
}
}
...
public class ExitHandler
{
...
private readonly Action<bool> applicationState;
...
public void Exit();
}
我知道我們可以將 bool 值包裝到類中,然后將其作為引數傳遞,但不知何故,它可以通過 Action 委托來完成。問題是如何?
uj5u.com熱心網友回復:
Action 可以“捕獲”一個區域變數或欄位。所以這很簡單:
internal class Program
{
static bool isRunning = true;
static void Main(string[] args)
{
var exitHandler = new ExitHandler(() => isRunning = false) ;
do
{
exitHandler.Exit();
}
while (isRunning);
}
}
public class ExitHandler
{
Action onExit;
public ExitHandler(Action onExit)
{
this.onExit = onExit;
}
public void Exit() => onExit();
}
uj5u.com熱心網友回復:
在我看來,你可以只使用 CancellationTokenSource
internal class Program
{
static void Main(string[] args)
{
var exitHandler = new CancellationTokenSource();
do
{
exitHandler.Cancel();
}
while (!exitHandler.IsCancellationRequested);
}
}
它更簡單,而且作為獎勵,執行緒安全。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/418201.html
標籤:
