Tôi đang cố gắng thiết lập Castle Windsor lần đầu tiên và tôi đang gặp một số vấn đề với nó. Tôi có ba dự án trong giải pháp của tôi:Thiết lập Castle Windsor trong MVC
- miền
- Dal
- Web
Các dịch vụ được đặt tại Dal. Tất cả đều được kế thừa từ IService
. (UserService
triển khai IUserService
, IUserService
triển khai IService
). Ứng dụng web là một ứng dụng MVC 5. Tất cả bộ điều khiển kế thừa từ BaseController
.
tôi đã sử dụng this bài để giúp tôi thiết lập Windsor nhưng tôi tiếp tục nhận được ngoại lệ:
Một ngoại lệ của loại 'Castle.MicroKernel.ComponentNotFoundException' xảy ra ở Castle.Windsor.dll nhưng đã không được xử lý trong sử dụng đang
thông tin bổ sung: Không có thành phần để hỗ trợ các dịch vụ Solution.Web.Controllers.HomeController đã được tìm thấy
điều lạ là đường dẫn cho tiếp con lăn là chính xác.
Dưới đây là mã của tôi cho cấu hình:
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()
);
}
}
Và trong 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);
}
}
Bất kỳ sự giúp đỡ hoặc hướng dẫn đi đúng hướng được đánh giá rất cao!
Vui mừng vì nó hoạt động ngay bây giờ. Bạn đã phải thay đổi đăng ký bộ điều khiển của bạn? – greyalien007
Nope việc đăng ký của bộ điều khiển là chính xác. Cảm ơn một lần nữa cho những lời khuyên và giải thích! – Thijs