C # Iniezione inserimento dipendenza

1

Questa è la mia prima volta che utilizzo Unity, quindi abbi pazienza per un momento. Ho un progetto di Visual Studio 2012 di esempio con 4 progetti (ma solo due di questi progetti verranno utilizzati con Unity). Questa è la seguente configurazione dei progetti:

  1. Database - Progetto WinForm che visualizza un modulo dettagli principale
  2. DatabaseUtilities - Una libreria di classi che implementa il modello di repository. L'interfaccia si chiama ISampleRepository.cs e il tipo si chiama SampleRepository.cs

Impostazione del progetto http://www.omnicom-innovations.com/Snippets/Images/Unity /UnityQuestion2.png

Ho letto su Dependency Injection e capisco che il codice UnityContainer viene posizionato nella posizione iniziale in cui verrà eseguita l'applicazione.

Dovrebbe andare in Database.Program.cs o in una classe Bootstrapper.cs che risiede nel progetto DatabaseUtilities ?

Chiedo perché Program.cs è tecnicamente il punto di accesso al progetto Database WinForm.

Ecco il mio codice per Bootstrapper.cs:

using Microsoft.Practices.Unity.Configuration;

namespace DatabaseUtilities
{
    public class Bootstrapper
    {
        private static UnityContainer _container;

        public static ISampleRepository<Employee> LoadSampleRepository()
        {
            _container = new UnityContainer();
            _container.RegisterType(typeof(ISampleRepository<Employee>), typeof(SampleRepository));
            var obj = _container.Resolve<ISampleRepository<Employee>>();


            return obj;            
        }
    }
}

Sto pensando di fare riferimento a Bootstrapper.cs da Program.cs nel progetto Database.

Ma sarebbe considerata una buona pratica? Inoltre, voglio assicurarmi di non spararmi ai piedi più tardi. Diciamo che decido di implementare un altro modulo dal modulo MasterDetail e ho bisogno di eseguire un'operazione CRUD diversa (ad esempio un'operazione di aggiornamento). Voglio poter utilizzare la mia classe che implementa IRepository .

Sto guardando questo dall'angolo retto?

    
posta burritowarrior 07.10.2014 - 18:24
fonte

1 risposta

1

Fondamentalmente non sarebbe una buona idea mettere la logica del contenitore all'interno di una libreria. Quando si desidera utilizzare la libreria DatabaseUtilities in un altro progetto che utilizza un altro framework di iniezione delle dipendenze, si ha ancora la dipendenza con Unity.
Quindi in questo caso sarebbe meglio spostare la classe bootstrap sul progetto principale.
Mettere la logica di bootstrap all'interno di Program.cs o all'interno di una classe separata è fondamentalmente una questione di opinione, ma pensare al principio di responsabilità singola Direi di tenerli separati.

In alternativa puoi creare un altro progetto che è puramente responsabile della parte di configurazione del contenitore, ma probabilmente è eccessivo in questa situazione.

Un'altra alternativa è quella di unire entrambi i progetti in uno solo, perché è davvero necessario avere una separazione del progetto, non puoi semplicemente mettere DatabaseUtilities in uno spazio dei nomi separato all'interno del tuo progetto principale?

    
risposta data 08.10.2014 - 09:43
fonte

Leggi altre domande sui tag