Ho visto altre domande simili a questa, ma non ha risolto il mio problema. Esempio di una domanda: Unity register generic type for non generic interfaceUnity non può risolvere il repository generico
ho l'interfaccia
public interface IRepository<T>
{
T GetById(int id);
}
e la classe
public class Repository<T> : IRepository<T>
{
public T GetById(int id)
{
Console.WriteLine("Type: " + GetType());
return default(T);
}
}
mi registro che
Container.RegisterType(typeof(IRepository<>), typeof(Repository<>));
e cercare di risolverlo
IRepository<string> IRepository = Container.Resolve<IRepository<string>>();
Restituisce sempre null.
Ho visto molte fonti diverse e tutte mostrano lo stesso modo di implementarlo. Perché non funziona?
UPDATE
Questa è l'implementazione effettiva:
public class Program
{
static Program()
{
DIDefaultRegisters.Initialize();
}
public static void Main(string[] args)
{
var iRepository = UnityDIFacade.Resolve<IRepository<string>>();
iRepository.GetById(1);
}
}
public class DIDefaultRegisters
{
public static void Initialize()
{
Register(typeof(IRepository<>),typeof(Repository<>));
}
private static void Register(Type from, Type to)
{
UnityDIFacade.RegisterType(from, to);
}
}
public class UnityDIFacade
{
private static readonly IUnityContainer Container;
static UnityDIFacade()
{
IUnityContainer container = new UnityContainer();
var section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
if (section != null)
section.Configure(container);
Container = container;
}
public static T Resolve<T>()
{
T resolved = default(T);
if (Container.IsRegistered<T>())
resolved = Container.Resolve<T>();
return resolved;
}
public static void RegisterType(Type from, Type to)
{
Container.RegisterType(from, to);
}
}
Con il tuo aggiornamento capisco. Quindi registra effettivamente la "versione" generica. Ho cambiato il codice e aggiunto il blocco try-catch e ora funziona. Vi chiedo di rimuovere "= default (T)" all'inizio, perché dovremmo assegnare il valore predefinito (T) a quello risolto. Quindi stabilirò la tua risposta come soluzione. Grazie. – Th3B0Y