2014-10-03 1 views
0

일부 백엔드 작업에 사용되는이 서비스 프로젝트가 있습니다. 분명히 서비스를 모니터 할 모니터를 만들고, 그들이 제대로 작동하는지 확인하려고합니다. 나는 모니터를 위해 웹 폼을 사용하고 있으며, Ninject는 속성을 전혀 주입하지 않으려는 것 같다. (객체는 null로 돌아온다.) 그래서, 여기에 고장이다 : 그래서 채우기 위해이 곳의 호텔이 있습니다Ninject가 속성을 전혀 주입하지 않습니다?

[DataContract] 
public class UserSummary 
{ 
    public UserSummary(); 
    public UserSummary(User user); 

    [DataMember] 
    public AccountStatusValue AccountStatus { get; set; } 
    [DataMember] 
    public AudienceValue Audience { get; set; } 
    [DataMember] 
    public string EmailAddress { get; set; } 
    [DataMember] 
    public int ID { get; set; } 
    [DataMember] 
    public Guid Identifier { get; set; } 
    [DataMember] 
    public Name Name { get; set; } 
    [DataMember] 
    public string Username { get; set; } 
} 

하십시오 datacontract로 하나의 방법에 사용되고있는 모델에서

, 여기에 코드입니다. 다음은이를 호출하는 데 사용되고있는 인터페이스 방법 :

UserSummary GetUserSummaryInternal(string username); 

난 그냥가는 모니터를 얻으려고, (모든 것이 작동)가 제대로 구축 다른 부분이 있는가. 이제 다음은 웹 양식 코드입니다.

partial class ServicesMonitor : System.Web.UI.MasterPage 
{ 
    [Inject] 
    IUserManagementService Service { get; set; } 
    public ServicesMonitor(IUserManagementService service) 
    { 
     this.Service = service; 
    } 
    public ServicesMonitor() 
    { 

    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     UserSummary summary = Service.GetUserSummaryInternal("testing993"); 
     string message = "Up"; 

     Response.Write(message); 
     Response.End(); 
     return; 
    } 
} 

Ninject를 사용할 수 없기 때문에 코드 뒤에 코드가 많지 않습니다. 나는 여러 가지 다른 방법을 시도해 보았다. [Inject] 태그를 사용하지 않고, 생성자를 사용하는 등등. 나는 모듈에서 사용하고있는 인터페이스에 적절한 바인딩을 가지고있다.

private static void RegisterServices(IKernel kernel) 
    { 
     kernel.Bind<ServiceLibrary.Service.IUserManagementService>().To<ServiceLibrary.Service.UserManagementService>(); 
     kernel.Bind<ServiceLibrary.Service.IIntegrationService>().To<ServiceLibrary.Service.IntegrationService>(); 
     kernel.Load(new List<string> { "ServiceLibrary.dll" }); 
    } 

:이 서비스 라이브러리를 사용하는 응용 프로그램에 잘 작동, 나는 또한 아무 소용이 아직 App_Start 폴더에 NinjectWebCommon 파일에 결합하지만 추가했습니다. Ninject는 서비스 라이브러리 프로젝트 내에서 단일 aspx 웹 양식에서 어떻게 작동하지 않을 수 있습니까? 나는 당황 스럽다. ...

+0

웹 프로젝트에'Ninject.Web' 패키지를 추가 했습니까? –

+0

예. 나는이 솔루션에 걸쳐 여러 다른 장소에서 ninject를 사용하고 있으며, 다른 곳에서는 잘 작동하고 있습니다. webform에 속성을 주입하고 싶지 않은 이유가 있습니다. – Skrubb

답변

1

내 자신의 질문에 대답하기 때문에, occam의 면도기, 종종 가장 간단한 해결책은 올바른 것이다. 그래서 여기에 제가 발견 한 것이 있습니다. 저는 다른 사람들도 이것을 경험하고 있다고 확신합니다. 당신이 개체가 "노력"되는 파일 뒤에 코드에 코드를 살펴 경우 주입한다 : 이것은 원래 어떻게 생겼는지

[Inject] 
IUserManagementService Service { get; set; } 

입니다. 당신은 어떤 것도 기분 나빠 보이니? 나에게 꽤 평범 해 보였으며, 컴파일 오류 또는 어떤 종류의 오류도 없었습니다. 글쎄, 잠시 내 머리를 감싸고, 내 마음을 맑게하기 위해 휴식을 취할 때, 나는 그것이 완벽하게 이해한다는 결론에 도달했다. 해결책 :

[Inject] 
public IUserManagementService Service { get; set; } 

회원을 공개로 설정하십시오! 일단 공개되면, Ninject는 이제 그것을 볼 수 있으며 적절하게 주입 할 수 있습니다. 모든 것이 잘되었습니다. 다른 사람들이이 문제를 겪고있는 다른 곳에서 몇 가지 게시물을 보았습니다. 항목을 공개하지 않기로했습니다. 내 신참 실수가.

관련 문제