StructureMap ASP.net MVC非注入接口
本文关键字:注入 接口 MVC ASP net StructureMap | 更新日期: 2023-09-27 17:58:06
我曾试图让结构映射依赖项正常工作,但在构造函数中放入接口而不是类名时,它无法正常工作。
以下代码有效:
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>();
}
}
请参阅本文了解更多信息。