我可以在不使用界面的情况下使用Windsor注入组件吗

JonasGao

我喜欢ioc。以前,我在Java中使用Spring,现在,我想在C#中使用DI。我找到了Castle.windsor。但是它似乎没有直接注射类。

现在,我尝试此方法,但是失败了……。有人,您可以帮我解决这个问题吗?或者,告诉我,我可以使用什么DI框架?

Program.cs

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

namespace InjectionConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            var container = new WindsorContainer();
            container.Install(new MainInstaller());

            var service1 = container.Resolve<Service1>();

            service1.Say();

            // clean up, application exits
            container.Dispose();

            Console.ReadKey();
        }
    }

    class MainInstaller : IWindsorInstaller
    {
        public void Install(IWindsorContainer container, IConfigurationStore store)
        {
            container.Register(Classes.FromThisAssembly());
        }
    }
}

Service1.cs

using System;

namespace InjectionConsole
{
    class Service1
    {
        private Service2 Service2 { get; set; }

        public void Say()
        {
            Console.WriteLine("Hello, I m Service 1, let me call Service 2");

            Service2.Say();
        }
    }
}

Service2.cs

using System;

namespace InjectionConsole
{
    class Service2
    {
        public void Say()
        {
            Console.WriteLine("Hello, I m Service 2");
        }
    }
}
斯科特·汉嫩

我的答案与另一个类似,但有一个区别:

public class Service1
{
    private readonly Service2 _service2;

    public Service1(Service2 service2) {
        _service2 = service2;
    }

    public void Say()
    {
        Console.WriteLine("Hello, I m Service 1, let me call Service 2");

        _service2.Say();
    }
}

首先,无论您是否使用像Windsor这样的容器,都将以完全相同的方式编写类本身。该类必须Service2从某处“获取”其依赖项(的一个实例)。因此,我们将其放入构造函数中。Service1期望任何创造它的东西都能提供一个Service2由于您使用的是容器,因此容器会创建Service1,它会在构造函数中看到需要Service2,并提供。

制作字段强调的是,一旦创建_service2readonly字段(构造函数完成执行)Service1,便无法进一步控制的值_service2它已设置且无法更改,即使在中也无法更改Service1这是因为我们不希望是非常重要的Service1,以控制这种依赖性。我们希望它需要这种依赖性。它只接受传入的任何值并使用它。

再次,那是分裂头发的区别。如果你没有_service2 readonly你可能不会无论如何改变它。但这清楚地表明您无法更改它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在不使用界面的情况下创建Mixin

来自分类Dev

我可以在不使用“ this”的情况下重写Javascript吗?

来自分类Dev

我可以在不使用EntityFramework的情况下使用ObjectContext吗?

来自分类Dev

我可以在不使用ionic的情况下使用cordova-plugin-ionic-webview吗?

来自分类Dev

我可以在不使用表的情况下使用 SQL Server 事务吗?

来自分类Dev

可以在不使用 Maven 的情况下开发插件吗?

来自分类Dev

我们可以在不使用Datepicker的情况下将材质UI选择器中的日历组件用作独立组件吗?

来自分类Dev

我可以在不使用google-services.json的情况下初始化Firebase吗?

来自分类Dev

我可以在不使用等待的情况下从异步中捕获错误吗?

来自分类Dev

我可以在不使用eval的情况下编写此宏吗?

来自分类Dev

我可以在不使用IP的情况下创建以太网络吗

来自分类Dev

我可以在不使用文件缓存的情况下更快地复制大文件吗?

来自分类Dev

我可以在不使用objectAtIndex的情况下阅读视图控制器吗?

来自分类Dev

我可以在不使用SSH的情况下从cPanel运行grep吗?

来自分类Dev

我可以在不使用循环的情况下从此命令中删除 bash 子进程吗?

来自分类Dev

我们可以在不使用 Firebase 的情况下向全球发送通知吗?

来自分类Dev

我可以创建 LiveUSB 以在不使用 CD 的情况下安装 Lubuntu 吗?

来自分类Dev

我可以在不使用 Java 循环的情况下填充二维数组吗?

来自分类Dev

我可以在不使用文件缓存的情况下更快地复制大文件吗?

来自分类Dev

DD WRT-是否可以使用任何选项(SNMP / CLI)在不使用Web界面的情况下获取路由器的温度?

来自分类Dev

是否可以在不显示界面的情况下使用iOS 8 Action App Extension?

来自分类Dev

是否可以在没有Web界面的情况下以批处理模式使用Onedrive?

来自分类Dev

我可以在不使用 javascript 的情况下使用 href 或其他内容从 .html 文件调用 .java 文件吗

来自分类Dev

我可以在这种情况下使用枚举吗?

来自分类Dev

在不使用eval的情况下,是否可以在shell脚本中进行命令注入?

来自分类Dev

我可以在不使用外部服务的情况下通过chrome应用程序获取IP地址吗?

来自分类Dev

我可以在不使用控制器的情况下从laravel中的href标签返回视图吗?

来自分类Dev

我可以在不使用R的情况下将.rda文件转换为python中的pandas数据框吗?

来自分类Dev

我可以在不使用外部服务的情况下通过chrome应用程序获取IP地址吗?

Related 相关文章

  1. 1

    在不使用界面的情况下创建Mixin

  2. 2

    我可以在不使用“ this”的情况下重写Javascript吗?

  3. 3

    我可以在不使用EntityFramework的情况下使用ObjectContext吗?

  4. 4

    我可以在不使用ionic的情况下使用cordova-plugin-ionic-webview吗?

  5. 5

    我可以在不使用表的情况下使用 SQL Server 事务吗?

  6. 6

    可以在不使用 Maven 的情况下开发插件吗?

  7. 7

    我们可以在不使用Datepicker的情况下将材质UI选择器中的日历组件用作独立组件吗?

  8. 8

    我可以在不使用google-services.json的情况下初始化Firebase吗?

  9. 9

    我可以在不使用等待的情况下从异步中捕获错误吗?

  10. 10

    我可以在不使用eval的情况下编写此宏吗?

  11. 11

    我可以在不使用IP的情况下创建以太网络吗

  12. 12

    我可以在不使用文件缓存的情况下更快地复制大文件吗?

  13. 13

    我可以在不使用objectAtIndex的情况下阅读视图控制器吗?

  14. 14

    我可以在不使用SSH的情况下从cPanel运行grep吗?

  15. 15

    我可以在不使用循环的情况下从此命令中删除 bash 子进程吗?

  16. 16

    我们可以在不使用 Firebase 的情况下向全球发送通知吗?

  17. 17

    我可以创建 LiveUSB 以在不使用 CD 的情况下安装 Lubuntu 吗?

  18. 18

    我可以在不使用 Java 循环的情况下填充二维数组吗?

  19. 19

    我可以在不使用文件缓存的情况下更快地复制大文件吗?

  20. 20

    DD WRT-是否可以使用任何选项(SNMP / CLI)在不使用Web界面的情况下获取路由器的温度?

  21. 21

    是否可以在不显示界面的情况下使用iOS 8 Action App Extension?

  22. 22

    是否可以在没有Web界面的情况下以批处理模式使用Onedrive?

  23. 23

    我可以在不使用 javascript 的情况下使用 href 或其他内容从 .html 文件调用 .java 文件吗

  24. 24

    我可以在这种情况下使用枚举吗?

  25. 25

    在不使用eval的情况下,是否可以在shell脚本中进行命令注入?

  26. 26

    我可以在不使用外部服务的情况下通过chrome应用程序获取IP地址吗?

  27. 27

    我可以在不使用控制器的情况下从laravel中的href标签返回视图吗?

  28. 28

    我可以在不使用R的情况下将.rda文件转换为python中的pandas数据框吗?

  29. 29

    我可以在不使用外部服务的情况下通过chrome应用程序获取IP地址吗?

热门标签

归档