Castle Windsor と依存性注入を使用して ASP.NET MVC プロジェクトを作成しようとしています。次のことを期待して、すべてが正常に機能しています。
Global.asax
Container = new WindsorContainer();
Container.Install(new WebInstaller(), new LoggingInstaller());
var customControllerFactory = new CustomControllerFactory(Container);
ControllerBuilder.Current.SetControllerFactory(customControllerFactory);
Castle クラスを登録するための Web インストーラー:
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);
}
問題は、コンテナーが CustomMessage コンストラクターの IController 依存関係を解決できないため、IAddMessage プロパティが null であることです。しかし、この問題を解決する方法がわかりません。
Castle コンテナーの内部エラー メッセージには、次のように表示されます。
このコンポーネントの一部の依存関係を静的に解決できませんでした。'User.Web.UI.Helper.Messages.CustomMessage' は次の依存関係を待機しています: - 登録されていないサービス 'System.Web.Mvc.IController'。
私はウェブをよく見ましたが、私の問題に対する実用的なヒントや解決策が見つかりません。