[英]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.