【发布时间】:2015-06-25 12:32:42
【问题描述】:
在我的解决方案中,我有 3 个项目:WebAPI、BusinessLayer 和 DataLayer。
在 WebAPI 中,我将结构图配置为使用 DefaultRegistry:
public class DefaultRegistry : Registry
{
public DefaultRegistry()
{
Scan(
scan => {
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
For<Business.Interfaces.IBusinessClass>().Use(ctx => new Business.BusinessClass());
For<Data.Interfaces.IDataClass>().Use(ctx => new Data.DataClass());
}
}
WebAPI 中的控制器类如下所示:
public class MyController : ApiController
{
private readonly IBusinessClass _businessClass;
public MyController(IBusinessClass businessClass)
{
_businessClass = businessClass;
}
public HttpResponseMessage Get(int id)
{
var success = _businessClass.DoSomething();
return success ? Request.CreateResponse(HttpStatusCode.OK) : Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Error");
}
}
在这个例子中为 _businessClass 注入依赖就像一个魅力。
现在让我们看一下 BusinessClass 的实现:
public class BusinessClass : IBusinessClass
{
private readonly IDataClass _dataClass;
public BusinessClass(IDataClass dataClass)
{
_dataClass = dataClass;
}
public void DoSomething()
{
_dataClass.DoSomethingWithData();
}
}
在此示例中,_dataClass 的依赖注入不起作用。构造函数中的 dataClass 参数为 null,因此 _dataClass 字段未正确初始化。我究竟做错了什么? 我要补充一点,BusinessClass 是在 BusinessLayer 项目中定义的,而 DataClass 是在 DataLayer 项目中定义的(这两个项目都是类库)。
【问题讨论】:
-
ctx => new Data.DataClass()行怎么编译?您的问题中是否有第二个构造函数没有显示? -
这只是一个简化,所以帖子不会因为不必要的代码而臃肿。
-
看来问题不在于结构图本身,而在于内部类的设计。很抱歉给您带来麻烦,并感谢您提供帮助。案件结案。
标签: c# asp.net-web-api structuremap