1

SO上有一些关于允许使用 ValidationAttribute (Asp.Net MVC3: Set custom IServiceProvider in ValidationContext so validators can resolve services)的解决方法的帖子,但我使用的是 OWIN 和 WebApi,所以我不确定如果这是可能的?

所有其他依赖注入工作正常。

DependencyResolver 没有填充到 OWIN 中,我记得读过 OWIN 如何处理验证请求的注入的差异。有谁知道 Autofac、OWIN、WebApi 和 ValidationAttribute 是否可行?而且,有具体的例子吗?

4

1 回答 1

2

您需要注册 Autofac 中间件,然后您需要将其扩展至 WebApi。现在您可以在 OWIN 中间件中使用 Autofac 分辨率。

        // Register the Autofac middleware FIRST.
        app.UseAutofacMiddleware(container);

        // extend the autofac scope to the web api
        app.UseAutofacWebApi(HttpConfiguration);

此后,WebApi 和 OWIN 中间件将共享相同的解析上下文,您可以为所欲为。

例如,对于 ValidationAttribute 事情,您可以执行以下操作:

public class AppStartup
{

    public void Configuration(IAppBuilder app)
    {
        // Get your HttpConfiguration. In OWIN, you'll create one
        // rather than using GlobalConfiguration.
        var config =  new HttpConfiguration();

        //Set builder
        var builder = new ContainerBuilder();

        //IoC container build
        var container = builder.Build();

        app.UseAutofacMiddleware(container);
        app.UseAutofacWebApi(HttpConfiguration);

        WebApiConfig.Register(HttpConfiguration);
        app.UseWebApi(HttpConfiguration);
    }
}

接着

    public override bool IsValid(object value)
    {
        var dependencyResolver = (AutofacWebApiDependencyResolver)GlobalConfiguration.Configuration.DependencyResolver;
        using (var lifetimeScope= dependencyResolver.BeginScope())
        {
            var foo = lifetimeScope.Resolve<Foo>();

            // use foo
        }
    }
于 2016-03-23T14:31:43.470 回答