0

我指的是教程。

开始,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。

4

2 回答 2

0

第一次注册非常简单。您只需注册所有实现IController接口的类。这些课程也是他们的服务。所以如果你想解决例如。HomeController你只要打电话container.Resolve<HomeController>()

第二个注册从声明 的命名空间中获取所有类,并使用默认接口EventRepository注册它们。所以如果你想解决你必须打电话。EventRepositorycontainer.Resolve<IEventRepository>()

如果AnotherEventRepository您不必添加另一个注册,如果它在同一个命名空间中。但是,如果它也实现了IEventRepository,您实际上将不知道将解决哪些实现。

于 2013-07-31T12:19:23.973 回答
0

如果您需要注册所有实现 IEventRepository 的类,您需要添加 BasedOn 如上所述。不要忘记您添加的位置...这意味着您只考虑属于该 ns 的类。

于 2013-07-26T22:40:03.100 回答