サーバーとクライアントの 2 つのクラスがあります。サーバーは複数のスレッドでクライアントをインスタンス化する必要があり、クライアントにはカスタム実装を提供する必要がある仮想メンバーがあります。私の質問はです。Client クラスは Server クラスのネストされたクラスである必要がありますか、それともインターフェイスと依存性注入を使用してカスタム実装を Server クラスに取得する必要があります。現在、Client クラスには、変更してはならない標準ロジックを提供する多くのプライベート メソッドもあります。
public class Server
{
    public void DoWork()
    {
        for (var i = 0;i < 10; i++)
        {
            Client client = new Client();
            client.Process(i);
        }
    }
}
public class Client
{
    private void doSomething() 
    { 
       ...
    }
    // Needs to be overridden and provide custom logic
    public virtual string Process(int i)
    {
        return i.ToString();
    }
}
作業例:
public interface IClient
{
    string Process(string message);
}
public abstract class Client : IClient
{
    public virtual string Process(string message)
    {
        return message;
    }
}
public class CustomClient : Client
{
    public CustomClient() { }
    public override string Process(string message)
    {
        return string.Format("Custom Client:{0}", message);
    }
}
public class Server
{
    private Func<IClient> createClient;    
    public Server() { }
    public Server(Func<IClient> client)
    {
        createClient = client;
    }
    public void DoWork()
    {
        for (var i = 0; i < 10; i++)
        {
            IClient = client = createClient();
            client.Process(string.Format("Client #{0}", i));
        }
    }
}
テスト プログラム...ステップスルーして、それが CustomClient にヒットすることを確認します
class Program
{
    static void Main(string[] args)
    {
        Func<CustomClient> factory = () => new CustomClient();
        var server = new Server(factory);
        server.DoWork();
    }
}