我指的是this教程。
在beginning,IController类型注册为:
public class ControllersInstaller:IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromThisAssembly()
.BasedOn<IController>()
.LifestyleTransient());
}
}
但后来EventRepository注册如下:
public class RepositoriesInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.Register(Classes.FromThisAssembly()
.Where(Component.IsInSameNamespaceAs<EventRepository>())
.WithService.DefaultInterfaces()
.LifestyleTransient()));
}
}
两者有什么区别?我尝试使用用于IController注册的方法来注册IEventRepository,但它不起作用?为什么呢?
现在,在IEventRepository的情况下,它的实现EventRepository用于注册。如果我实现另一个类说AnotherEventRepository,那么我将不得不为此添加另一个注册。我们不能使用单一注册来注册所有类型的IEventRepository。
答案 0 :(得分:0)
如果您需要注册所有实现IEventRepository的类,您需要添加如上所述的BasedOn。不要忘记你添加的地方......这意味着你只考虑属于那个ns的类。
答案 1 :(得分:0)
首次注册非常简单。您只需注册实现IController
接口的所有类。这些课程也是他们的服务。所以,如果你想解决,例如。 HomeController
您只需致电container.Resolve<HomeController>()
。
第二次注册从声明EventRepository
的命名空间中获取所有类,并使用default interfaces注册它们。因此,如果您想解决EventRepository
,则必须致电container.Resolve<IEventRepository>()
。
如果是AnotherEventRepository
,则如果它位于同一名称空间中,则不必添加其他注册。但如果它也实现了IEventRepository
,你实际上并不知道将解决哪些实现。