Widziałem inne pytania podobne do tego, ale to nie rozwiązało mojego problemu. Przykładem jednego pytania: Unity register generic type for non generic interfaceJedność nie może rozwiązać Generic Repository
I przyjmujemy, że interfejs
public interface IRepository<T>
{
T GetById(int id);
}
a klasa
public class Repository<T> : IRepository<T>
{
public T GetById(int id)
{
Console.WriteLine("Type: " + GetType());
return default(T);
}
}
ją zarejestrować
Container.RegisterType(typeof(IRepository<>), typeof(Repository<>));
i spróbować go rozwiązać
IRepository<string> IRepository = Container.Resolve<IRepository<string>>();
Zawsze zwraca wartość null.
Widziałem wiele różnych źródeł i wszystkie pokazują ten sam sposób realizacji. Dlaczego to nie działa?
UPDATE
Jest to rzeczywista realizacja:
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);
}
}
Z twoją aktualizacją Rozumiem. Więc faktycznie rejestruje ogólną "wersję". Zmieniłem kod i dodałem blok try-catch, który teraz działa. Proszę, usuń "= domyślnie (T)" na początku, ponieważ powinniśmy przypisać wartość domyślną (T) do rozstrzygnięcia w haczyku. Wtedy ustawię twoją odpowiedź jako rozwiązanie. Dziękuję Ci. – Th3B0Y