我是温莎城堡的新手,正在尝试了解基本知识...

我有以下代码...

namespace WindowsBash.Models
{
    public interface IShouter
    {
        string Display();
    }

    public class Shout : IShouter
    {
        private IMessage _message;

        public Shout(IMessage message)
        {
            _message = message;
        }

        public string Display()
        {
            return _message.TheMessage();
        }
    }

    public interface IMessage
    {
        string TheMessage();
    }

    public class MessageHello : IMessage
    {
        public string TheMessage()
        {
            return "Hello";
        }
    }

    public class MessageBye : IMessage
    {
        public string TheMessage()
        {
            return "Bye";
        }
    }
}


然后,我可以使用以下方法尝试测试温莎在做什么。

private void TestIOC()
{
    var container = new WindsorContainer();
    container.Register(
        AllTypes.FromAssemblyContaining<IShouter>()
                .Where(x => x.Namespace.StartsWith("WindowsBash"))
                .WithService.AllInterfaces());

    var MyShouter = container.Resolve<IShouter>();
    var result = MyShouter.Display();
}


现在,它总是返回“ Hello”。如果我希望它返回“再见”,我需要在不更改类顺序的情况下进行哪些更改?

最佳答案

我假设您要使用自动接线。如果没有,您可以为每个组件进行手动注册。 (编辑:看起来您自己发现了一对一的注册:))。

请参阅针对此问题选择的答案以使用自动装配,但控制特定类型的默认实现:

Castle Windsor: Using convention registration along with specific implementations

关于c# - 温莎城堡(IOC)基础知识,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7190253/

10-10 12:58