-1

저는 Unity를 배우고 매우 간단한 웹 API 솔루션을 만듭니다.모델 클래스에서 유니티 의존성을 해결할 수 없습니다.

public interface IClass1 
    { 
     string GetItem(); 
    } 

    public class Class1 : IClass1 
    { 
     public string GetItem() { 
      return "hello"; 
     } 
    } 

다음 나는 유니티는 IOC의 작업을 수행하는 데 사용하는 등 :

var container = new UnityContainer(); 
container.RegisterInstance<IClass1>(new Class1()); 

GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container); 
내가

[Dependency] 
public IClass1 Class1Instance { get; set; } 

[HttpGet] 
[Route("Hello")] 
public IHttpActionResult PutData() 
{ 
    return Ok(Class1Instance.GetItem()); 
} 

그러나 경우 컨트롤러에 의존성을 얻으려면 위의 코드는 잘 작동

Model 클래스, 즉 Base 클래스에서 같은 작업을하려고합니다 .... 해결할 수 없습니다 ....

public class Base 
{ 
    [Dependency] 
    public IClass1 ClassInstance { get; set; } 

    public string Name { get; set; } 

    public string GetVal() 
    { 
     return ClassInstance.GetItem(); // ClassInstance is null 
    } 
} 

은 내가 모델 클래스에 해결 의존성을 얻으려면

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
     { 
      JObject jobject = new JObject(); 
      object target; 

      if (jobject.Property("Name") != null) 
       target = new Base(); // Here is the problem root cause ?? 

      serializer.Populate(jobject.CreateReader(), target); 
      return target; 
     } 

어떻게 내 문제를 해결하기 위해 .... 어쩌면 문제는 jsonConverter에서입니다 .... 그것에 대해 아무 생각이 없다?

감사합니다.

+0

왜 jsonconverter와 관련이 있다고 생각합니까? – CodingYoshi

+0

난 그냥 모델 클래스에 대한 의존성을 해결할 수없는 이유를 모르겠다. – allencharp

+0

@ CodingYoshi의 질문을 확장하려면 왜 jsonConverter라고 생각합니까? jsonConverter를 해결하는 것과 관련된 예외를 얻었습니까? 문제의 범위를 좁히는 데 도움이되는 예외 세부 정보를 제공해 주실 수 있습니까? –

답변

0

귀하의 질문에 대한 이해를 바탕으로 귀하의 솔루션에 누락 된 링크는 controller입니다. DependencyResolver을 설정하는 것은 실제로 필요한 단계입니다. UnityDependencyResolver에 대한 코드를 모르면 그 부분이 정확하다고 가정합니다. 당신이 제공 한 코드에서 누락 된 것은``controller` 클래스입니다. 다음과 같이 생성하십시오 :

public class TestController : ApiController 
{ 
    [RoutePrefix("api/Whatever")] 
    public TestController(IClass1 class1) 
    { 
     // At this point, your class1 will have been 
     // instantiated by Unity. 
    } 

    [HttpGet] 
    [Route("EvenMore")] 
    public HttpResponseMessage EvenMore(string foo) 
    { 
    } 
} 

그런 다음 생성자에 중단 점을 넣고 EvenMore를 호출하십시오. 작동하지 않는 경우 질문을 다른 정보로 업데이트하십시오.

관련 문제