[英]StructureMap ASP.net MVC Not Injecting Interface
我试图使结构图依赖关系正常工作,但是在将接口放入构造函数中而不是放置类名称时,它不能正确工作。
以下代码有效:
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包来设置依赖项注入。 我究竟做错了什么?
在调用程序集中,如果只有一个实现接口代表一个接口,则可以像下面这样使用
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
scan.SingleImplementationsOfInterface();
});
如果没有SingleImplementationsOfInterface()方法,则structuremap无法识别IService接口的正确实现类。
要么
你可以像下面这样映射
ObjectFactory.Initialize(x =>
{
x.Scan(scan =>
{
scan.TheCallingAssembly();
scan.WithDefaultConventions();
});
x.For<IService>().Use<MyService>();
});
试试下面这段代码:
public class MvcBootStrapper
{
public static void ConfigurationStructureMap()
{
ObjectFactory.Initialize(x =>
{
x.AddRegistry<MyService>();
});
}
}
最后注册您的类和接口,如下所示:
public class SampleRegistery : Registry
{
public SampleRegistery ()
{
ForRequestedType<IService>().TheDefaultIsConcreteType<MyService>();
}
}
看到此文章获取更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.