gpt4 book ai didi

c#运行时丢失引用

转载 作者:行者123 更新时间:2023-12-04 17:06:56 24 4
gpt4 key购买 nike

我将项目中的数据访问层分开,以按国家/地区应用不同的验证规则。

例如我有一个接口(interface)“IVoucherService”

public interface IVoucherService
{
void Foo();
}

在许多项目中实现
namespace VoucherHU
{
[ApiLocalization(ApiLocalization.HU)]
public class VoucherService : IVoucherService
{
public void Foo(){}
}
}

namespace Voucher
{
[ApiLocalization(ApiLocalization.US)]
[ApiLocalization(ApiLocalization.DEFAULT)]
public class VoucherService : IVoucherService
{
public void Foo(){}
}
}

以下代码确定必须使用哪个类
private static Type GetServiceImplementedType<TService>() where TService : class
{
Type serviceType = typeof(TService);
IEnumerable<Type> types = AppDomain.CurrentDomain.GetAssemblies().SelectMany(s => s.GetTypes()).Where(p => !p.IsInterface && serviceType.IsAssignableFrom(p));

Type serviceImplementedClass = null;
foreach (Type type in types)
{
ApiLocalizationAttribute[] attributes = (ApiLocalizationAttribute[])type.GetCustomAttributes(typeof(ApiLocalizationAttribute), true);
if (attributes != null && attributes.Count() > 0 && attributes.Any(a => a.Localization == Localization))
{
serviceImplementedClass = type;
break;
}
}

return serviceImplementedClass;
}

我在 Global.asax -> Application_Start 方法中注册了这些服务。
发布后它工作正常,服务正常启动,但如果没有人使用该网站,IIS(可能是为了节省资源)会暂停服务,直到下一个请求。 当 API 尝试重新注册服务时,它找不到任何实现 IVoucherService 接口(interface)的类。

我在 watch 中手动检查了它,我收到以下错误

Services.Voucher.VoucherService error CS0234: The type or namespace name 'Services' does not exist in the namespace (are you missing an assembly reference?)



对于实现此接口(interface)的其他类,我遇到了相同的错误。

知道为什么我会丢失对这些文件(Services.dll、ServicesHU.dll)的引用吗?

最佳答案

我想到了。
不知何故 AppComaing.CurrentDomain.GetAssemblies()不再包含 DLL 文件的汇编信息。
解决方案是在每次调用 Global.asax -> Application_Start 方法时刷新引用的程序集。
要刷新引用的程序集,请使用此方法

System.Web.Compilation.BuildManager.GetReferencedAssemblies();

关于c#运行时丢失引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48185717/

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