首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Castle Windsor:如何从代码中指定构造函数参数?

在 Castle Windsor 中,您可以使用几种方法来从代码中指定构造函数参数:

  1. 使用 DependsOn 属性:

首先,在您的类中定义构造函数参数,并使用 DependsOn 属性将其与类关联。例如:

代码语言:csharp
复制

public class MyClass

{

代码语言:txt
复制
   private readonly string _parameter;
代码语言:txt
复制
   public MyClass(string parameter)
代码语言:txt
复制
   {
代码语言:txt
复制
       _parameter = parameter;
代码语言:txt
复制
   }

}

assembly: DependsOn(typeof(MyClass))

代码语言:txt
复制

然后,在您的安装程序类中,使用 Component.For<T>().Dependency 方法指定构造函数参数:

代码语言:csharp
复制

public class MyInstaller : IWindsorInstaller

{

代码语言:txt
复制
   public void Install(IWindsorContainer container, IConfigurationStore store)
代码语言:txt
复制
   {
代码语言:txt
复制
       container.Register(
代码语言:txt
复制
           Component.For<MyClass>().DependsOn(Parameter.ForKey("parameter").Eq("myValue"))
代码语言:txt
复制
       );
代码语言:txt
复制
   }

}

代码语言:txt
复制
  1. 使用 TypedFactoryFacility

首先,在您的类中定义构造函数参数,并使用 TypedFactoryFacility 创建工厂来生成类的实例。例如:

代码语言:csharp
复制

public interface IMyClassFactory

{

代码语言:txt
复制
   MyClass Create(string parameter);

}

public class MyClass

{

代码语言:txt
复制
   private readonly string _parameter;
代码语言:txt
复制
   public MyClass(string parameter)
代码语言:txt
复制
   {
代码语言:txt
复制
       _parameter = parameter;
代码语言:txt
复制
   }

}

public class MyInstaller : IWindsorInstaller

{

代码语言:txt
复制
   public void Install(IWindsorContainer container, IConfigurationStore store)
代码语言:txt
复制
   {
代码语言:txt
复制
       container.AddFacility<TypedFactoryFacility>();
代码语言:txt
复制
       container.Register(
代码语言:txt
复制
           Component.For<MyClass>().Named("myClass"),
代码语言:txt
复制
           Component.For<IMyClassFactory>().AsFactory()
代码语言:txt
复制
       );
代码语言:txt
复制
   }

}

代码语言:txt
复制

然后,在您的应用程序代码中使用工厂来创建 MyClass 的实例:

代码语言:csharp
复制

var myClassFactory = container.Resolve<IMyClassFactory>();

var myClass = myClassFactory.Create("myValue");

代码语言:txt
复制

这些方法允许您在 Castle Windsor 中指定构造函数参数,以便在创建类的实例时使用这些参数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

领券