c#运行时丢失引用

标签 c# .net namespaces system.reflection

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

例如我有一个接口(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/

相关文章:

javascript - 您可以在同一个 ajax 调用中同时处理 json 和 html 数据类型吗?

c# - 我如何在 Monogame 项目中实现 Awesomium 1.7.4.2?

c# - async with await 与同步调用有何不同?

c# - 无法在 C# 中将一个列表附加到另一个列表...尝试使用 AddRange

.net - 有没有办法在.NET 中自动生成对应的resx 文件进行字符串本地化?

python - 使用自由变量时是否创建了命名空间?

c# - ASP.NET 网站到 Web 应用程序的转换问题 - 无法加载类型 'ClassName' 并为所有现有网页技术设置命名空间

c++ - 命名空间和前向声明问题

c# - 需要从 linq 检索 Tablet>

c# - 如果小数部分为零,如何删除小数点分隔符?