如何在 ASP.NET Core 3 预览版中使用 Lamar 2?
How to use Lamar 2 with ASP.NET Core 3 preview?
我为 Lamar 配置了 ASP.NET Core 3,但出现错误
System.InvalidCastException: 'Unable to cast object of type 'Microsoft.Extensions.DependencyInjection.ServiceCollection' to type 'Lamar.ServiceRegistry'.'
我的配置在 Program
class:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseLamar();
webBuilder.UseStartup<Startup>();
});
}
和Startup
class:
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
//public void ConfigureServices(IServiceCollection services)
//{
// services.Configure<CookiePolicyOptions>(options =>
// {
// // This lambda determines whether user consent for non-essential cookies is needed for a given request.
// options.CheckConsentNeeded = context => true;
// options.MinimumSameSitePolicy = SameSiteMode.None;
// });
// services.AddMvc()
// .AddNewtonsoftJson();
//}
public void ConfigureContainer(ServiceRegistry services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
// Supports ASP.Net Core DI abstractions
services.AddMvc().AddNewtonsoftJson();
services.AddLogging();
// Also exposes Lamar specific registrations
// and functionality
services.Scan(s =>
{
s.TheCallingAssembly();
s.WithDefaultConventions();
});
}
根据文档,我将 ConfigureServices
替换为 ConfigureContainer
,但出现了上面提到的错误。
任何人都可以帮助我在 ASP.NET Core 3 预览版中使用 Lamar 吗?
已更新
正如#Tom Style 所写,接受的答案已经很旧而且贬值了,所以他把新的看他的答案。
您可以像这样尝试用旧的 HostBuilder 替换:
public static IWebHostBuilder CreateHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseLamar()
.UseUrls($"http://*:80")
.UseStartup<Startup>();
IWebHostBuilder 肯定会工作,但现在已弃用。
此代码示例展示了如何将其与现代 IHostBuilder 界面结合使用。
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
private static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseLamar();
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
我为 Lamar 配置了 ASP.NET Core 3,但出现错误
System.InvalidCastException: 'Unable to cast object of type 'Microsoft.Extensions.DependencyInjection.ServiceCollection' to type 'Lamar.ServiceRegistry'.'
我的配置在 Program
class:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseLamar();
webBuilder.UseStartup<Startup>();
});
}
和Startup
class:
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
//public void ConfigureServices(IServiceCollection services)
//{
// services.Configure<CookiePolicyOptions>(options =>
// {
// // This lambda determines whether user consent for non-essential cookies is needed for a given request.
// options.CheckConsentNeeded = context => true;
// options.MinimumSameSitePolicy = SameSiteMode.None;
// });
// services.AddMvc()
// .AddNewtonsoftJson();
//}
public void ConfigureContainer(ServiceRegistry services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
// Supports ASP.Net Core DI abstractions
services.AddMvc().AddNewtonsoftJson();
services.AddLogging();
// Also exposes Lamar specific registrations
// and functionality
services.Scan(s =>
{
s.TheCallingAssembly();
s.WithDefaultConventions();
});
}
根据文档,我将 ConfigureServices
替换为 ConfigureContainer
,但出现了上面提到的错误。
任何人都可以帮助我在 ASP.NET Core 3 预览版中使用 Lamar 吗?
已更新 正如#Tom Style 所写,接受的答案已经很旧而且贬值了,所以他把新的看他的答案。
您可以像这样尝试用旧的 HostBuilder 替换:
public static IWebHostBuilder CreateHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseLamar()
.UseUrls($"http://*:80")
.UseStartup<Startup>();
IWebHostBuilder 肯定会工作,但现在已弃用。
此代码示例展示了如何将其与现代 IHostBuilder 界面结合使用。
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
private static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.UseLamar();
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})