С помощью ASP.NET Core 2+ вы можете вводить пользовательские типы в ваш класс Startup
, используя метод ConfigureServices
в IWebHostBuilder
для регистрации ваших служб до разрешения Startup
с его зависимостями.
Единственное предостережение заключается в том, чтобы гарантировать, что все зависимости, тип которых был зарегистрирован, также были зарегистрированы, что в данном случае, когда эти зависимости добавляются с помощью метода AddMvc
, маловероятно.
Это просто показывает, что он можетготово.
С помощью следующего пользовательского типа
public interface IMyCustomType
{
void DoSomethingCustom();
}
public class MyCustomType : IMyCustomType
{
public void DoSomethingCustom()
{
throw new Exception("Custom stuff happens here");
}
}
Вы регистрируете это в своем классе Program
, где создается и настраивается ваш WebHostBuilder
.
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureServices(services => services.AddScoped<IMyCustomType, MyCustomType>())
.UseStartup<Startup>();
}
После этого ваш Startup
станет таким же или похожим на то, что у вас есть сейчас - за исключением того, что вы не выполните регистрацию в ConfigureServices
здесь.
public class Startup
{
private readonly IMyCustomType myCustomType;
public Startup(IConfiguration configuration, IMyCustomType myCustomType)
{
Configuration = configuration;
this.myCustomType = myCustomType;
}
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.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
myCustomType.DoSomethingCustom();
app.UseMvc();
}
}