【发布时间】:2014-04-12 16:52:22
【问题描述】:
我试图让结构映射依赖项正常工作,但在将接口放入构造函数而不是放入类名时,它无法正常工作。
以下代码有效:
public class HomeController : Controller
{
private readonly MyService _service;
public HomeController(MyService service)
{
_service = service;
}
public ActionResult Index()
{
return View();
}
}
public class MyService : IService
{
public string GetName()
{
return "Hello";
}
}
public interface IService
{
string GetName();
}
但是下面的代码不起作用:
public class HomeController : Controller
{
private readonly IService _service;
public HomeController(IService service)
{
_service = service;
}
public ActionResult Index()
{
return View();
}
}
public class MyService : IService
{
public string GetName()
{
return "Hello";
}
}
public interface IService
{
string GetName();
}
这里是来自 DependencyResolution 类的逻辑:
public static IContainer Initialize() {
ObjectFactory.Initialize(x =>
{
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
// x.For<IExample>().Use<Example>();
});
return ObjectFactory.Container;
}
我正在使用 StructureMap.MVC4 nuget 包来设置依赖注入。我做错了什么?
【问题讨论】:
-
发布设置 StructureMap 绑定的代码?
-
我想我应该使用 x.For
().Use (); -
如果引用的程序集中只有一个,有没有办法让它假设 MyService?
-
@Jonathan -
WithDefaultConventions()实际上应该为您做到这一点,所以我不确定为什么不这样做。也许他们也必须在同一个命名空间中? -
@mmillican 我可能是错的,但我相信 WithDefaultConventions 将
IFoo映射到Foo。在这种情况下,他想将IFoo映射到MyFoo鉴于这似乎是一个玩具示例,更改类型名称可能是一个不错的解决方案。
标签: c# asp.net-mvc-4 structuremap