Я видел другие вопросы, подобные этому, но это не решило мою проблему. Пример одного вопроса: Unity register generic type for non generic interfaceUnity не может решить общий репозиторий
У меня есть Интерфейс
public interface IRepository<T>
{
T GetById(int id);
}
и класс
public class Repository<T> : IRepository<T>
{
public T GetById(int id)
{
Console.WriteLine("Type: " + GetType());
return default(T);
}
}
зарегистрировать его
Container.RegisterType(typeof(IRepository<>), typeof(Repository<>));
и попытаться решить его
IRepository<string> IRepository = Container.Resolve<IRepository<string>>();
Он всегда возвращает null.
Я видел много разных источников, и все они показывают тот же способ его реализации. Почему это не работает?
UPDATE
Это фактическая реализация:
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);
}
}
С вашим обновлением я понимаю. Таким образом, он фактически регистрирует общую «версию». Я изменил код и добавил блок try-catch, и теперь он работает. Я прошу вас удалить «= default (T)» в начале, потому что мы должны назначить default (T) для разрешения в catch. Тогда я отвечу в качестве решения. Спасибо. – Th3B0Y