编程语言
首页 > 编程语言> > C#-温莎城堡(IOC)基础

C#-温莎城堡(IOC)基础

作者:互联网

我是温莎城堡的新人,正在尝试掌握基本知识…

我有以下代码…

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

标签:castle-windsor,c
来源: https://codeday.me/bug/20191208/2088232.html