我正在学习Unity,并创建一个非常简单的web api解决方案。
public interface IClass1
{
string GetItem();
}
public class Class1 : IClass1
{
public string GetItem() {
return "hello";
}
}
然后我使用Unity来执行IoC作业,例如:
var container = new UnityContainer();
container.RegisterInstance<IClass1>(new Class1());
GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);
如果我想获得对Controller
的依赖,上面的代码工作正常[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
}
}
我根本不知道......也许问题来自于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 :(得分: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。如果它不起作用,请使用您可能拥有的任何其他信息更新您的问题。