ile özel Web API eylem filtresi özniteliğine bağımlılıkları enjekte etme Bir MVC4 uygulamasında API denetleyicileri süslemek için kullandığım özel AuthorizeAttribute
bağımlılarımın çözümlerini çözmeye çalışıyorum. Sorun şu ki, özel filtremde kullandığım hizmet bağımlılığı üzerinde NullReferenceException
almaya devam ediyorum.Autofac
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
var builder = new ContainerBuilder();
builder.RegisterApiControllers(Assembly.GetExecutingAssembly());
builder.RegisterType<UnitOfWork>().As<IUnitOfWork>().InstancePerApiRequest();
builder.RegisterType<DatabaseFactory>().As<IDatabaseFactory>().InstancePerApiRequest();
builder.RegisterAssemblyTypes(typeof(UserProfileRepository).Assembly)
.Where(t => t.Name.EndsWith("Repository"))
.AsImplementedInterfaces().InstancePerApiRequest();
builder.RegisterAssemblyTypes(typeof(IUserProfileMapper).Assembly)
.Where(t => t.Name.EndsWith("Mapper"))
.AsImplementedInterfaces().InstancePerApiRequest();
builder.RegisterAssemblyTypes(typeof(UserProfileSvc).Assembly)
.Where(t => t.Name.EndsWith("Svc"))
.AsImplementedInterfaces().InstancePerApiRequest();
builder.RegisterWebApiFilterProvider(config);
var container = builder.Build();
var resolver = new AutofacWebApiDependencyResolver(container);
config.DependencyResolver = resolver;
}
}
ve benim özel yetki filtre: İşte benim Autofac yapılandırma
var builder = new ContainerBuilder();
builder.RegisterWebApiFilterProvider(GlobalConfiguration.Configuration);
Ama bu görünmüyor: tüm gereken official docs göre
public class MyAuthorizeAttribute : AuthorizeAttribute
{
public IAuthenticationSvc _authenticationSvc;
protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
{
if (!base.IsAuthorized(actionContext))
{
return false;
}
var trueUserId = WebSecurity.CurrentUserId;
if (_authenticationSvc.GetUsersRoles(trueUserId).Any(x => x == "Admin")) return true;
// NullReferenceException on _authenticationSvc
}
}
olduğunu hile de yapın. Herhangi bir yardım için teşekkür ederiz.
Ben _authenticationSvc bir özellik değil bir saha – MikeSW
@MikeSW Şimdi bana bu istisna verir olması gerektiğini düşünüyorum: 'Bir Etiket eşleşen 'AutofacWebRequest' ile hiçbir kapsamını kapsamından görünür olduğu Örnek istendi. Bu genellikle, HTTP'ye göre kaydedilen bir bileşenin bir SingleInstance() bileşeni (veya benzer bir senaryo) tarafından talep edildiğini belirtir. Web entegrasyonu altında her zaman bağımlılığın DependencyResolver.Current veya ILifetimeScopeProvider.RequestLifetime'dan istemini istemez. . –