-1

我正在學習Unity,並創建一個非常簡單的web api解決方案。模型類無法解決Unity依賴關係

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類上做同樣的工作,即基類....我無法解決....

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

    public string Name { get; set; } 

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

我目前沒有這方面的想法....也許這個問題是從jsonConverter ....

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; 
     } 

如何解決我的問題,如果我想獲得Model類依賴的決心?

謝謝!

+0

你爲什麼認爲它與jsonconverter有關? – CodingYoshi

+0

我只是猜測,我只是不知道爲什麼我無法解決模型類的依賴關係 – allencharp

+0

要擴展@ CodingYoshi的問題,爲什麼你認爲它是jsonConverter?你有沒有得到解決jsonConverter相關的異常?你能否向我們提供任何可能有助於縮小問題範圍的例外細節? –

回答

0

根據我對您的問題的理解,我認爲您解決方案中缺少的鏈接是controller。設置DependencyResolver確實是一個必需的步驟。在不知道UnityDependencyResolver的代碼的情況下,我會假定該部分是正確的。您提供的代碼中缺少的是控制器類。創建它如:

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。如果它不起作用,請用您可能具有的任何其他信息更新您的問題。

相關問題