私はCastle Windsorを初めてセットアップしようとしています。私はそれにいくつか問題があります。城ウィンザーをMVCに設定
- ドメイン
- DAL
- ウェブ
サービスはDALに配置されています。私は私の溶液中の3つのプロジェクトを持っています。彼らはすべてIService
から継承しています。 (UserService
はIUserService
を実装し、IUserService
はIService
を実装しています)。 WebアプリケーションはMVC 5アプリケーションです。すべてのコントローラはBaseController
から継承されます。
は、私は私のセットアップウィンザーを助けるためにthisポストを使用しますが、私は例外を得続ける:
型「Castle.MicroKernel.ComponentNotFoundException」の例外がCastle.Windsor.dllで発生したが、ユーザーに処理されませんでしたコード
追加情報:奇妙なことがあるSolution.Web.Controllers.HomeControllerが
発見されたサービスをサポートするためのノーコンポーネントその続きのパスローラーが正しい。以下は
は、コンフィギュレーションのために私のコードです:
public class WindsorControllerFactory : DefaultControllerFactory
{
private readonly IKernel kernel;
public WindsorControllerFactory(IKernel kernel)
{
this.kernel = kernel;
}
public override void ReleaseController(IController controller)
{
kernel.ReleaseComponent(controller);
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
if (controllerType == null)
{
throw new HttpException(404, string.Format("The controller for path '{0}' could not be found.", requestContext.HttpContext.Request.Path));
}
return (IController)kernel.Resolve(controllerType);
}
}
public class ControllersInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(
Classes.FromThisAssembly()
.BasedOn(typeof(BaseController))
.LifestyleTransient());
}
}
public class ServiceInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Types.FromAssemblyContaining(typeof(IService).GetType())
.BasedOn<IService>().WithService.FromInterface()
.LifestyleTransient()
);
}
}
そして、Global.asaxの中:右方向に
public class MvcApplication : System.Web.HttpApplication
{
private static IWindsorContainer container;
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// Setup Castle.Windsor IOC
MvcApplication.BootstrapContainer();
}
protected void Application_End()
{
container.Dispose();
}
private static void BootstrapContainer()
{
container = new WindsorContainer().Install(FromAssembly.This());
container.Install(FromAssembly.Containing(typeof(IService).GetType()));
var controllerFactory = new WindsorControllerFactory(container.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
}
}
すべてのヘルプやガイダンスは大歓迎です!
今はうれしい嬉しいです。コントローラの登録をまったく変更する必要はありませんでしたか? – greyalien007
コントローラの登録が正しくありませんでした。ヒントと説明のためにもう一度おねがいします! – Thijs