gpt4 book ai didi

c# - Unity 无法解析通用存储库

转载 作者:太空狗 更新时间:2023-10-29 21:39:09 24 4
gpt4 key购买 nike

我看到其他类似的问题,但没有解决我的问题。一个问题的例子:Unity register generic type for non generic interface

我有界面

    public interface IRepository<T>
{
T GetById(int id);
}

和类(class)

    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。

我看到了许多不同的来源,它们都展示了相同的实现方式。为什么它不起作用?

更新

这是实际的实现:

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);
}
}

最佳答案

你应该去掉勾选 if (Container.IsRegistered<T>())在你的代码中,因为这将返回 false对于您请求的每个存储库。具体的存储库,如 IRepository<string> , IRepository<User>等未在容器中注册只有 IRepository<T> 的通用版本.

如果要返回null ,然后在 Container.Resolve 附近使用 try-catch-block在发生异常时将 resolved 设置为 null。

public static T Resolve<T>()
{
T resolved;

//if (Container.IsRegistered<T>())
try{
resolved = Container.Resolve<T>();
}
catch(Exception){
resolved = default(T);
}
return resolved;
}

关于c# - Unity 无法解析通用存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25685665/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com