이것에 대해 몇 가지 질문을했지만, 필자가 따르는 정확한 문서를 가리키는 경향이 있지만 여전히 작동하지 않습니다.속성에 Autofac 속성 주입이 실패했습니다.
상당히 간단한 ASP.NET MVC 4 사이트를 구축 중이며 ActionFilterAttribute
기반 로깅을 사용할 계획입니다. 데이터베이스와 트랜잭션을 열고 단위 작업 인스턴스를 제공하는 DataAccessProvider
클래스가 있으며이를 필터 특성에 주입하려고합니다.
documentation은 RegisterFilterProvider()
을 호출하고 관련 유형이 등록되어 있는지 확인하기 만하면됩니다. 그것은 속성을 등록 할 필요가 없다고 구체적으로 말하지만, 나는 상관없이 속성을 등록하려고 노력했다. 내 코드는 현재이 같은 같습니다 워드 프로세서의 예는 다음 바로 필터에 속성을 배치
var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());
builder.Register(x => new EntityAccessProvider())
.As<IDataAccessProvider>()
.InstancePerHttpRequest();
builder.RegisterType<DebugLogAttribute>().PropertiesAutowired();
//^I've tried it with and without this line
builder.RegisterFilterProvider();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
을, 그래서 나는 같은 일을했습니다
public class DebugLogAttribute : ActionFilterAttribute
{
private IDataAccessProvider DataAccess { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext) { ... }
public override void OnActionExecuted(ActionExecutedContext filterContext) { ... }
}
워드 프로세서가 모두가 말할 required - 삽입 할 생성자조차 없습니다. 그것은 속성 주입에 의해 완료됩니다. 그러나이 코드를 실행하면 DataAccess
속성은 항상 null
입니다. Autofac은 그것을 무시하는 것 같습니다. 컨트롤러에 정확하게 EntityAccessProvider
을 주입했기 때문에 등록이 올바르게 작동하지만 속성에 대해 작동하지 않습니다. 내가 뭘 놓치고 있니?
죄송합니다. 감사! – anaximander
해결책 주셔서 감사합니다 :) – Redplane