我想創建一個ASP.NET城堡溫莎和依賴注入ASP.NET MVC項目。一切工作正常遇到下列情況:ASP.NET MVC城堡溫莎和依賴注入
的Global.asax
Container = new WindsorContainer();
Container.Install(new WebInstaller(), new LoggingInstaller());
var customControllerFactory = new CustomControllerFactory(Container);
ControllerBuilder.Current.SetControllerFactory(customControllerFactory);
Webinstaller註冊Castle類:
string connectionStr = GetConnectionString("MainModel");
container.Register(Component.For(typeof(MainModelContainer)).DependsOn(new {
connectionString = connectionStr }).LifestylePerWebRequest());
container.Register(Classes.FromAssemblyContaining<MemberQueries>().InNamespace("User.EF.Queries").WithService.DefaultInterfaces().LifestylePerWebRequest());
container.Register(Classes.FromAssemblyContaining<HomeController>().BasedOn<IController>().LifestylePerWebRequest());
//PROBLEM that doesn't work
container.Register(Classes.FromAssemblyContaining<HomeController>().BasedOn<IAddMessage>().LifestylePerWebRequest());
的HomeController
public IAddMessage AddMessage { get; set; }
private readonly IMemberQueries _memberContract;
public HomeController(IMemberQueries memberContract)
{
_memberContract = memberContract;
}
public ActionResult Index()
{
//PROBLEM AddMessage is Null and is not resolved automaticaly
AddMessage.Add("Test", MessageTypes.message);
return View("Index");
}
IAddMessage實施
public class CustomMessage : IAddMessage
{
private IController Controller { get; set; }
public CustomMessage(IController controller)
{
Controller = controller;
}
public void Add(string text, MessageTypes messageTypes)
{
//TODO
}
}
IAddMessage接口
public interface IAddMessage
{
void Add(string text, MessageTypes messageTypes);
}
的問題是,該IAddMessage屬性爲null,因爲容器不能解析在CUSTOMMESSAGE構造函數中的一個IController依賴。但我不知道如何解決這個問題。
在城堡容器中的內部錯誤消息顯示這一點:
此組件的某些依賴性不能被靜態解決。 'User.Web.UI.Helper.Messages.CustomMessage'正在等待下列依賴項: - 未註冊的服務'System.Web.Mvc.IController'。
我在網上看了很多,但我找不到任何工作提示或解決方案,我的問題。
我不知道這是否有助於找到解決方案,因此我不打算回答。當它通過構造函數參數註冊IAddMessage的CustomMessage實現時,內核將嘗試解析IController。也許IController超出範圍或需要先註冊。 –