我正在尝试使用 Castle Windsor 和依赖注入创建一个 ASP.NET MVC 项目。一切正常,期待以下内容:
全球.asax
Container = new WindsorContainer();
Container.Install(new WebInstaller(), new LoggingInstaller());
var customControllerFactory = new CustomControllerFactory(Container);
ControllerBuilder.Current.SetControllerFactory(customControllerFactory);
用于注册 Castle 类的 Webinstaller:
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());
家庭控制器
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 属性为空,因为容器无法解析 CustomMessage 构造函数中的 IController 依赖项。但我不知道如何解决这个问题。
Castle 容器中的内部错误消息显示:
此组件的某些依赖项无法静态解析。'User.Web.UI.Helper.Messages.CustomMessage' 正在等待以下依赖项: - 未注册的服务'System.Web.Mvc.IController'。
我在网上看了很多,但我找不到任何工作提示或解决我的问题的方法。