L'ho fatto così tante volte ma non finisco mai per apprezzare il modo in cui il mio codice risulta. Sto chiedendo se qualcun altro ha gli stessi problemi e può offrire soluzioni o convenzioni che ha usato per rendere il codice più pulito.
Quando costruisco un servizio C #, ottengo TopShelf, Log4Net e Ninject tutti installati e configurati. All'interno del mio progetto di servizio, finisco con una classe come questa. La parte a cui sono più interessato è SuperLargeStaticClassThing.RegisterDependencies(_kernel);
sealed class ServiceMain
{
[NotNull]
private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private IKernel _kernel;
/// <summary> Starts the service.</summary>
public void Start()
{
Log.Info("Service Start");
// Step 1: Register Ninject Dependencies
_kernel = new StandardKernel();
SuperLargeStaticClassThing.RegisterDependencies(_kernel);
// Step 2: Start Service Endpoints
_kernel.Get<IEndpoint1>().Start();
// ...
}
/// <summary> Stops the service.</summary>
public void Stop()
{
Log.Info("Service Stop");
// Stop Service Endpoints
_kernel.Get<IEndpoint1>().Stop();
// ...
}
}
E il mio metodo SuperLargeStaticClassThing.RegisterDependencies(_kernel);
finisce per essere enorme, brutto, monolitico, tu lo chiami. Sono centinaia di linee di interfacce solo vincolanti per altri tipi. A volte puoi farcela con la registrazione basata sulla convenzione per renderla più breve, ma credo che anche questa non sia sempre una soluzione. Non solo il metodo è enorme, sembra poco pratico. A volte alcune dipendenze devono essere scambiate in blocchi, quindi mi piacerebbe vedere le diverse categorie di dipendenze registrate insieme. Sento che ci deve essere un modo migliore, ma sono bloccato nel trovarne uno che mi piace.
Qualcuno ha qualche suggerimento su un modello per risolvere il problema di un metodo di registrazione enorme e poco maneggevole?