Я пытаюсь зарегистрировать новый компонент в своем приложении mvc, используя windsor ..
Сначала я сослался на все dll в windsors ..
Затем я использовал этот код:
public class WindsorControllerFactory : DefaultControllerFactory
{
WindsorContainer container;
public WindsorControllerFactory()
{
container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));
//Registers all components as transient.
var controllerTypes = from t in Assembly.GetExecutingAssembly().GetTypes()
where typeof(IController).IsAssignableFrom(t)
select t;
foreach(Type t in controllerTypes)
{
container.AddComponentLifeStyle(t.FullName, t, LifestyleType.Transient);//Exception thrown here
}
}
protected virtual IController GetControllerInstance(Type controllerType)
{
return (IController)container.Resolve(controllerType);
}
}
Исключение:
[ComponentRegistrationException: Компонент SportsStore.Controllers.ProductController не может быть зарегистрирован.Уже есть компонент с таким именем.Вы хотите изменить существующий компонент?Если это не так, убедитесь, что вы указали уникальное имя.] Castle.MicroKernel.SubSystems.Naming.DefaultNamingSubSystem.Register (обработчик IHandler) в каталоге c: \ BuildAgent \ work \ 9834359f44c23fee \ src \ Castle.Windsor \ MicroKernel \ SubSystems \ Naming \ DefaultNamingSamingSamingS.cs: 237 Castle.MicroKernel.Castle.MicroKernel.DefaultKernel.RegisterHandler (имя строки, обработчик IHandler) в каталоге c: \ BuildAgent \ work \ 9834359f44c23fee \ src \ Castle.Windsor \ MicroKernel \ DefaultKernel.cs: 713 Castle.MicroKernel.DefaultKernel.TypeCenton., Введите classType, LifestyleType lifestyle, логическое перезаписьLifestyle) в c: \ BuildAgent \ work \ 9834359f44c23fee \ src \ Castle.Windsor \ MicroKernel \ DefaultKernel_ObsoleteAPI.cs: 106 Castle.MicroKernel.DefaultKernel.AddType Type, тип образа жизни, класс типа жизни (класс компонента)Boolean overwriteLifestyle) в c: \ BuildAgent \ work \ 9834359f44c23fee \ src \ Castle.Windsor \ MicroKernel \ DefaultKernel_ObsoleteAPI.cs: 59 Castle.Windsor.WindsorContainer.AddComponentLifeStyle (строковый ключ, тип образа \ рабочий тип в стиле \ рабочий тип)\ 9834359f44c23fee \ src \ Castle.Windsor \ Windsor \ WindsorContainer_ObsoleteAPI.cs: 94 WindsorControllerFactory..ctor () в D: \ Call.of.Duty.Modern.Warfare.3-RELOADED \ SportsStore \ SportsStore \ SportsStoreF WindoryControl: Контроллер33 SportsStore.MvcApplication.Application_Start () в D: \ Call.of.Duty.Modern.Warfare.3-RELOADED \ SportsStore \ SportsStore \ SportsStore \ Global.asax.cs: 31
Я изменилweb.config как таковой:
<configSections>
<section name="castle"
type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler,
Castle.Windsor" />
<!-- ... leave all the other section nodes as before ... -->
</configSections>
<castle>
<components>
</components>
</castle>
и в глобальном asax-файле я добавил эту строку:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
ControllerBuilder.Current.SetControllerFactory(
new WindsorControllerFactory());
RegisterRoutes(RouteTable.Routes);
}
Контейнер / windsorContainer пуст, как вы можете видеть из ИнтернетаФайл .config, в нем есть пустой компонент .. и у меня есть только один контроллер для добавления --- Называется ProductController..Так как он добавляет контроллер дважды? !!?