相关疑难解决方法(0)

ASP.NET MVC 6中FilterAttribute内的依赖注入

我正在努力尝试在类型的控制器过滤器属性中注入服务的ASP.NET MVC 6(beta 4版本)AuthorizationFilterAttribute.

这是服务(它注入了另一项服务)

public class UsersTableRepository
{
    private readonly NeurosgarContext _dbContext;

    public UsersTableRepository(NeurosgarContext DbContext)
    {
        _dbContext = DbContext;
    }

    public ICollection<User> AllUsers
    {
        get
        {
            return _dbContext.Users.ToList();
        }
    }

    //other stuff...
}
Run Code Online (Sandbox Code Playgroud)

这是启动服务启用类中的ConfigureServices方法

  public void ConfigureServices(IServiceCollection services)
  {
        //...

        services.AddSingleton<NeurosgarContext>(a => NeurosgarContextFactory.GetContext());
        services.AddSingleton<UifTableRepository<Nazione>>();
        services.AddSingleton<UsersTableRepository>();
  }
Run Code Online (Sandbox Code Playgroud)

一个简单的"虚拟"控制器,上面定义了两个过滤器.您可以注意到我已经通过装饰属性在该控制器中完成了DI [FromServices]并且它可以工作.

[Route("[controller]")]
[BasicAuthenticationFilter(Order = 0)]
[BasicAuthorizationFilter("Admin", Order = 1)]
public class DummyController : Controller
{

    [FromServices]
    public UsersTableRepository UsersRepository { get; set; }

    // GET: /<controller>/
    [Route("[action]")]
    public IActionResult …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc dependency-injection filter

7
推荐指数
1
解决办法
3977
查看次数

注入具有构造函数依赖项的记录器

我正在尝试重构一些代码,以通过startup.cs中的映射服务使用.NET Core依赖注入.我想在这里注入一个IRequestDatabaseLogger而不是新建它.但是它需要构造函数中的上下文.我怎样才能做到这一点?甚至没有DI框架甚至可能吗?

    public class ActionFilter : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            var requestDatabaseLogger = new RequestDatabaseLogger(context);
            long logId = requestDatabaseLogger.Log();

            context.HttpContext.AddCurrentLogId(logId);

            base.OnActionExecuting(context);
        }
   }
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection asp.net-core

6
推荐指数
1
解决办法
242
查看次数

如何使用Simple Injector将dependdencis注入到WCF属性中

我有一堆与REST和SOAP一起使用的WCF服务.我创建了一个WCF属性,用于检查当前的httpcontext是否存在,如果存在,则使用cookie身份验证,其他方式使用自定义WCF身份验证.

我的属性如下所示:

Public Class AuthRequired
    Inherits Attribute
    Implements IOperationBehavior, IParameterInspector

    Public Sub AddBindingParameters(operationDescription As OperationDescription, bindingParameters As Channels.BindingParameterCollection) Implements IOperationBehavior.AddBindingParameters

    End Sub

    Public Sub ApplyClientBehavior(operationDescription As OperationDescription, clientOperation As ClientOperation) Implements IOperationBehavior.ApplyClientBehavior

    End Sub

    Public Sub ApplyDispatchBehavior(operationDescription As OperationDescription, dispatchOperation As DispatchOperation) Implements IOperationBehavior.ApplyDispatchBehavior
        dispatchOperation.ParameterInspectors.Add(Me)
    End Sub

    Public Sub Validate(operationDescription As OperationDescription) Implements IOperationBehavior.Validate

    End Sub

    Public Sub AfterCall(operationName As String, outputs() As Object, returnValue As Object, correlationState As Object) Implements IParameterInspector.AfterCall

    End Sub

    Public Function BeforeCall(operationName As String, inputs() …
Run Code Online (Sandbox Code Playgroud)

wcf attributes inversion-of-control simple-injector

5
推荐指数
1
解决办法
2655
查看次数

自定义属性中的依赖注入

我有一个获取 2 个参数的自定义属性,如何将此参数注入MyAttribute?

public class MyAttribute : Attribute
{
    private readonly HttpContextAccessor _accessor;
    private readonly IUserService _userService;


    public MyAttribute(HttpContextAccessor accessor, IUserService userService)
    {
        _accessor = accessor; 
        _userService = userService;
        // ...
    }
}

Run Code Online (Sandbox Code Playgroud)

控制器:

[MyAttribute()]
[Route("/action")]
public IActionResult Action()
{
   retuen View();
}
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core

5
推荐指数
1
解决办法
4292
查看次数

将依赖项注入到验证属性Web Api Asp.Net Core中

我正在Asp.Net Core Web Api中构建自定义验证属性。我需要访问验证器中的IDataProtector和用于访问数据库的其他服务。我已经搜索过,并且没有找到有关此内容的任何文档。ActionFilters可以选择使用ServiceFilter,但是Validation Attribute似乎没有任何选择。有任何想法吗?

asp.net-mvc asp.net-web-api asp.net-core

3
推荐指数
3
解决办法
1555
查看次数

关于使用Ninject的问题

我完成了建议的步骤,将Ninject添加到我的MVC应用程序中.我向DbContext控制器的构造函数添加了一个参数.

控制器:

public class MyController : BaseController
{
    public ArticlesController(MyDbContext context)
        : base(context)
    { }
}
Run Code Online (Sandbox Code Playgroud)

基础控制器:

public class BaseController : Controller
{
    protected DbContext MyDbContext;

    public BaseController(MyDbContext context)
    {
        MyDbContext = context;
    }
}
Run Code Online (Sandbox Code Playgroud)

这似乎运作良好.但是请给我一些问题.

  1. Ninject能否确保我DbContext的清理和及时处理?

  2. 我为所有应用程序的控制器创建了一个基类来处理任何常见的初始化等.基类DbContext在构造函数中接受我的参数的实例.但这需要我也将此参数添加到我的应用程序中的每个控制器.有没有办法不要求这个?

  3. 我不确定创建一个我的实例是多么昂贵DbContext.是否有任何方法可以进行优化,只有在请求实际要求我访问数据库时才会创建它.

c# asp.net asp.net-mvc dependency-injection ninject

2
推荐指数
1
解决办法
1648
查看次数