【问题标题】:Console.WriteLine is not working after Resolve()Console.WriteLine 在 Resolve() 之后不起作用
【发布时间】:2013-02-03 05:25:12
【问题描述】:

此代码在执行期间没有给出错误或警告。但它忽略了console.read() 函数,我是温莎的新人。真的是 bug 还是 windsor 的简单行为?

using System;
using Castle.Windsor;
using Castle.MicroKernel.Registration;

namespace CastleProject
{
class Program
{
    internal interface ILogger
    {
        void log(string message);
        void showMethod();
    }
    internal interface Ishowing
    {
        void checkInterface();
    }

    class Logger : ILogger
    {
        public void log(string message)
        {
            Console.WriteLine(message);
            Console.Read();
        }
        public void showMethod()
        {
            Console.WriteLine("This is again showing just function i existing");
        }

    }
    class Showing : Ishowing
    {
        public void checkInterface()
        {
            Console.WriteLine("this is line from checkInterface()");
            var a = Console.ReadLine();
            Console.WriteLine(a);
        }
    }

    static void Main(string[] args)
    {
        var container = new WindsorContainer();
        container.Register(Component.For<ILogger>().ImplementedBy<Logger>(),Component.For<Ishowing>().ImplementedBy<Showing>());
        var logger = container.Resolve<ILogger>();
        var logger2 = container.Resolve<Ishowing>();
        logger.log("hello message");
        logger.showMethod();
        logger2.checkInterface();          
    }
}

}

【问题讨论】:

    标签: c# containers castle-windsor console.writeline


    【解决方案1】:

    我想你可能想使用Console.ReadLine 而不是Console.Read

    试试这个 sn-p 的代码来理解 Read/ReadLine 的行为:

    var a = Console.Read();
    Console.WriteLine(a);
    var b = Console.ReadLine();            
    Console.WriteLine(b);
    

    【讨论】:

    • 是的,它有效,但有点奇怪。 Console.Read() 假设读取一个字符,而 ReadLine 假设读取一行,是否有影响进程的垃圾值?
    • 这就是它的工作原理。 Console.Read() 将等待输入,但它只会从输入流中读取一个字符。因此,其余文本和“输入”将保留在输入流中。然后,如果您之后有 Console.ReadLine(),它只会读取流的其余部分,而不会再次等待“输入”。显然这与温莎城堡无关。
    • 还有一件事......在上面的代码中,我们可以使用相同的变量记录器来解析 ILogger 和 Ishowing 吗?我试过了,但做不到。
    • 如果您创建了新接口,例如从 IShowing 和 ILogger 继承的 IShowingLogger,您可以这样做,然后您可以让您的记录器类实现该接口,然后您可以解决它。 Resolve 方法返回单个接口,所以我认为这是唯一的方法。
    • 我还有一个问题,我们是否可以将一个具有两个类的接口注册为 polyphism 的概念,就像我们使用虚函数进行 polyphism 一样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 2020-01-05
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多