我目前正在尝试从外部程序集中加载嵌入的 ViewComponent。
我已将其包含在我的项目文件中:
<EmbeddedResource Include="Views\**\*.cshtml" />
Run Code Online (Sandbox Code Playgroud)
因此,当我检查实际程序集并运行 GetManifestResourceNames() 时,我看到该文件已嵌入。
然后我在 Startup.cs 的 ConfigureService() 中调用这个方法:
public static IMvcBuilder GetModules(this IMvcBuilder mvcBuilder)
{
var embeddedFileProviders = new List<EmbeddedFileProvider>
{
new EmbeddedFileProvider(Assembly.GetCallingAssembly())
};
mvcBuilder.ConfigureApplicationPartManager(apm =>
{
foreach (string modulePath in Directory.GetFiles(Configuration.Settings.Path, "*.Module.dll"))
{
var assembly = Assembly.LoadFrom(modulePath);
var startUpType = (from t in assembly.GetTypes()
where t.GetInterfaces().Contains(typeof(IModuleStartup))
select t).FirstOrDefault();
RegisterModuleServices(mvcBuilder, startUpType);
apm.ApplicationParts.Add(new AssemblyPart(assembly));
embeddedFileProviders.Add(new EmbeddedFileProvider(assembly));
Modules.Assemblies.Add(assembly);
}
var compositeFileProvider = new CompositeFileProvider(embeddedFileProviders);
mvcBuilder.Services.AddSingleton<IFileProvider>(compositeFileProvider);
});
return mvcBuilder;
}
Run Code Online (Sandbox Code Playgroud)
我也没有用
mvcBuilder.Services.Configure<RazorViewEngineOptions>(o =>
{
o.FileProviders.Add(compositeFileProvider);
});
因为这根本不起作用,甚至没有调用 …
我有一个自定义记录器,我想创建一个名为的扩展方法
SetContext(uniqueKey, object)
Run Code Online (Sandbox Code Playgroud)
我可以在我的自定义记录器中设置一个属性并在记录消息时记录该上下文。
所以代码看起来像这样
_logger
.SetContext(User.Email(), User)
.LogError(1, new Exception("foo foo foo"), "bleep Bloop");
Run Code Online (Sandbox Code Playgroud)
我似乎面临的问题是,通过控制器中的 DI 返回的 ILogger 又由我的扩展方法使用,实际上并不是我的自定义 ILogger 实现。
public static ILogger SetContext(this ILogger logger, string uniqueUserIdentifier, object context)
{
var redisPublisherLogger = logger as RedisPublisherLogger;
if (redisPublisherLogger == null)
{
return logger;
}
redisPublisherLogger.Context = new LoggingContext
{
ContextData = context,
UniqueUserIdentifier = uniqueUserIdentifier
};
return logger;
}
Run Code Online (Sandbox Code Playgroud)
所以无论如何我可以做这样的事情,我试图避免覆盖 ILogger 上的所有日志记录方法。
任何帮助,将不胜感激!谢谢
logging error-logging dependency-injection asp.net-core-mvc asp.net-core