简单的喷油器( si (文档在这里显示如何与ASP.NET Core集成 si :
private void IntegrateSimpleInjector(IServiceCollection services) {
container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<IControllerActivator>(
new SimpleInjectorControllerActivator(container));
services.AddSingleton<IViewComponentActivator>(
new SimpleInjectorViewComponentActivator(container));
services.EnableSimpleInjectorCrossWiring(container);
services.UseSimpleInjectorAspNetRequestScoping(container);
}
此示例代码显示了如何与控制器和查看器( mvc 型号(集成 SI ,我们曾经在 razor pages 型>。
但是,此DOE不集成 si 纳入剃须页,这是使用ASP.NET Core 2.0发布的新功能。这基本上是MVVM模型(并非完全(。
因此,剃须刀页面对于每个视图都有一个PageModel
,就像控制器一样。我想使用si。
我想出了一种使用简单注射器:
的注入PageModel
约束的方法 public class SimpleInjectorPageModelActivatorProvider : IPageModelActivatorProvider
{
private Container Container { get; }
public SimpleInjectorPageModelActivatorProvider(Container c) => Container = c;
public Func<PageContext, object> CreateActivator(CompiledPageActionDescriptor d) =>
_ => Container.GetInstance(d.ModelTypeInfo.AsType());
public Action<PageContext, object> CreateReleaser(CompiledPageActionDescriptor d) =>
null;
}
然后,只需添加此新的Singleton注册:
private void IntegrateSimpleInjector(IServiceCollection services)
{
container.Options.DefaultScopedLifestyle = new AsyncScopedLifestyle();
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddSingleton<IControllerActivator>(
new SimpleInjectorControllerActivator(container));
services.AddSingleton<IViewComponentActivator>(
new SimpleInjectorViewComponentActivator(container));
// Enables Injection into PageModel
services.AddSingleton<IPageModelActivatorProvider>(
new SimpleInjectorPageModelActivatorProvider(container));
services.EnableSimpleInjectorCrossWiring(container);
services.UseSimpleInjectorAspNetRequestScoping(container);
}
它的作用基本上是在创建PageModel时称为Container.GetInstance(instanceType)
。
简单的喷油器提供一种简单的方法来通过扩展方法 addpageModeLactivation 。
services.AddSimpleInjector(container, options =>
{
// AddAspNetCore() wraps web requests in a Simple Injector scope.
options.AddAspNetCore()
// Ensure activation of a specific framework type to be created by
// Simple Injector instead of the built-in configuration system.
.AddControllerActivation()
.AddViewComponentActivation()
.AddPageModelActivation()
.AddTagHelperActivation();
});
查看整个示例