문제

Nineject 2에 의해 여러 속성이 주입 될 것으로 예상되는 메소드 속성이 있지만 userSession 그리고 jobRepository 널로 올라오고 있습니다 :

[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class JobAttribute : ActionFilterAttribute {
    [Inject]
    private IUserSession userSession;

    [Inject]
    private IJobRepository jobRepository;

    public override void OnActionExecuting(ActionExecutingContext filterContext) {
        var filter = new JobFilter(userSession, jobRepository);

        filter.OnActionExecuting(filterContext);
    }
}

컨트롤러의 메소드는 다음과 같습니다.

[AcceptGet, Job]
public ActionResult Dimensions(Job job) {
    return View(job.Building);
}

컨트롤러에서 생성자 주입을 사용하면 컨트롤러의 매개 변수가 주입되기 때문에 설정이 작동한다는 것을 알고 있습니다. 그것은 재산 주입을 사용해야하지만 속성에 큰 도움이되지는 않습니다. 내가 여기서 뭔가를 놓치고 있습니까?

다음은 Global.asax.cs의 관련 물약입니다.

public class MvcApplication : Ninject.Web.Mvc.NinjectHttpApplication {
    protected override void OnApplicationStarted() {
        RegisterRoutes(RouteTable.Routes);
        RegisterAllControllersIn(Assembly.GetExecutingAssembly());
    }

    ...snip...

    protected override IKernel CreateKernel() {
        return new StandardKernel(
            new RepositoryConfiguration(),
            new AuthenticationModule(),
            new AutoMapperConfiguration()
        );
    }
}

public class RepositoryConfiguration : NinjectModule {
    public override void Load() {
        Bind<ICustomerRepository>().To<CustomerRepository>();
        Bind<IJobRepository>().To<JobRepository>();
    }
}

public class AuthenticationModule : NinjectModule {
    public override void Load() {
        Bind<MbdQuote.Core.AppService.IUserSession>().To<UserSession>();
    }
}
도움이 되었습니까?

해결책

Ninject2는 전계 주입을하지 않고 공개 세터를 사용한 속성으로 변경합니다.

class JobAttribute : ActionFilterAttribute {
    [Inject]
    public IUserSession UserSession
    { set; private get; }

    [Inject]
    public IJobRepository JobRepository
    { set; private get; }
}

Ninject 2 베타에서 발표:

Nineject 1.x에 있던 것들은 Nineject 2 :

  • 필드 주입 : Ninject 2의 주입은 이제 발현 나무에 의해 구동되며 .NET 3.5에서는 발현 트리로 필드 값을 설정할 방법이 없습니다. 어쨌든 이것은 나쁜 연습이기 때문에 나는 그것을 자르기로 결정했습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top