문제

나는 시도를 구현하는 종속성으로 주입 아키텍처(MVC,DDD 도메인 모델,Repository).내공이 포함됩 ASP.NET Id2.0.

이 단계에서,나는 원하지 않는 디 제어의 정체성 2.0 체(UserAdminController,RolesAdminController...).아보 보안체의 외부에 있습니다.이 단계에서는,통합 Id 체에서 디 매우 어렵습니다.나는 좋은 모습을 보 이미 누군가가 수행,그래서 제가 읽을 수 있는 방법을 배웁니다.나는 아무것도 찾을 수 없습니다.(을 발견 중 하나는 게시물을 가까이 왔는데,해상도).

어쨌든,저는 간단 인젝터 MVC 구현하십시오(표준 코드는 아래),그리고 많은 것을 내가 믿는 문제는 나에게 전화 RegisterMvcControllers.

올바른 경우,그러나 이 문 픽업 모든 컨트롤러로 자신의 이름을후로 고정"컨트롤러".

질문:어떻게 선택할 수 있습니는 컨트롤러 등록 간단한 Injector?(이라는 수동으로 등록?)

어떤 도움이 될 것이 크게 감사하고,내가 지출의 대부분은 오늘 우리는 어리석음을 주는 모든이며,다음 단계로 진행하,즉는 디 구현하고,인스턴스화 내 개체입니다.

...

...

...에서 호출 Application_Start()

        // Create a Simple Injector container
        var container = new Container();

        // Configure the container
        InitializeContainer(container);

        container.RegisterMvcControllers(Assembly.GetExecutingAssembly());

        // Verify the container's configuration
        container.Verify();

        DependencyResolver.SetResolver(new SimpleInjectorDependencyResolver(container));


    private static void InitializeContainer(Container container)
    {
        container.Register<MyService1>();            

        container.Register<IMyRepositoryA, MyRepositoryA>();

        // Trying to include Identity into Simple Injector - please ignore
        container.Register<IUserStore<ApplicationUser>>(() => new UserStore<ApplicationUser>(new ApplicationDbContext()));
    }
도움이 되었습니까?

해결책

RegisterMvcControllers 등록 다음과 같은 유형:

  • 유해 공개
  • 유형을 구현해야 합니다 System.Web.Mvc.IController
  • 유형 abstract
  • 유형되지 않아야 합니다 일반적인 유형의 정의
  • 그것의 이름으로 끝나야 합니다"컨트롤러"

당신이 볼 수 있는 무슨 일 여기에는 원시 코드.

RegisterMvcControllers 연장방법으로 통화 SimpleInjectorMvcExtensions.GetControllerTypesToRegister 방법 목록을 얻을 수있는 컨트롤러를 등록합니다.호출할 수 있는 방법을 자신이 볼 수있는 무엇이 등록 다음과 같다:

var registeredControllerTypes =
    SimpleInjectorMvcExtensions.GetControllerTypesToRegister(
        container, Assembly.GetExecutingAssembly())

그래서 대신 전화 RegisterMvcControllers 당신이 등록할 수 있는 컨트롤러 자신을 호출하여 GetControllerTypesToRegister 방법:

var registeredControllerTypes = 
    SimpleInjectorMvcExtensions.GetControllerTypesToRegister(
        container, Assembly.GetExecutingAssembly());

foreach (var controllerType in registeredControllerTypes)
{
    container.Register(controllerType, controllerType, Lifestyle.Transient);
}

이 방법으로 필터링할 수 있습니다 모든 컨트롤러를 등록하려는 수동:

var registeredControllerTypes = 
    SimpleInjectorMvcExtensions.GetControllerTypesToRegister(
        container, Assembly.GetExecutingAssembly())
    .Where(type => type.Name != "UserStore`1");

foreach (var controllerType in registeredControllerTypes)
{
    container.Register(controllerType, controllerType, Lifestyle.Transient);
}

또 다른 옵션은 무시 등록을 사용하고 있습니다:

container.RegisterMvcControllers(Assembly.GetExecutingAssembly());

container.Options.AllowOverridingRegistrations = true;

container.Register<IUserStore<ApplicationUser>>(
    () => new UserStore<ApplicationUser>(new ApplicationDbContext()))

// Always set the option back to false ASAP to prevent configuration errors.
container.Options.AllowOverridingRegistrations = false;
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top