我不確定我的期望是否錯誤。我正在使用ASP.NET MVC(不是核心)和Autofac。我有我的網站的每一頁上顯示的圖像,我創建了一個服務返回一個隨機圖像的名字,像這樣ASP.NET Autofac Singleton運行兩次構造函數注入
接口
public interface IBreadCrumbImage
{
string GetImage();
}
CLASS(剪斷,爲了簡潔)
public class BreadCrumbImage : IBreadCrumbImage
{
public string GetImage()
{
return ImageUrl;
}
}
的global.asax.cs(Autofac註冊)
protected void Application_Start()
{
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<BreadCrumbImage>().As<IBreadCrumbImage>().SingleInstance();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
CONTROLLER
public class HomeController : Controller
{
private IBreadCrumbImage _breadCrumbImage;
public ActionResult Index(BreadCrumbImage breadCrumbImage)
{
_breadCrumbImage = breadCrumbImage;
var x = _breadCrumbImage.GetImage();
ViewBag.BreadCrumbImage = "/img/BreadCrumbs/" + x;
return View();
}
}
所有這些工作,我得到我的IMAGE隨機顯示..但是,設置斷點,這個BreadCrumbImage服務被實例化每次訪問。我想要實例化一次(圖像的加載是在BreadCrumbImage的構造函數中完成的,它讀取文件並將它們放入數組中 - 在啓動應用程序時不需要這樣做,並且GetImages只是從數組中獲取rnd)。
我在SingleInstance中註冊了這個錯誤,還是因爲我期待它而不工作,我將不得不擁有一些與Global.asax中創建的生成器綁定的基本解析器。 CS?
更新:答案,謝謝特拉維斯。需要將其加入到autofac配置中,並且所有工作都像魅力一樣。
builder.RegisterType<ExtensibleActionInvoker>()
.As<IActionInvoker>()
.WithParameter("injectActionMethodParameters", true);
你是我的英雄。更新我缺少的問題,是的,你是正確的,MVC做了所有的工作,而不是Autofac。這也回答了我的另一個開放問題。真的非常感謝你! – plankalkul
你應該關閉你的另一個問題,所以大家不要試圖繼續回答。 –