如何在温莎城堡中通过匹配命名空间自动注册?
How to auto register by matching namespace in Castle Windsor?
我在写这篇文章之前检查了很多答案和文章,但我没有成功。
我想注册从 1 个特定接口 IInject
派生的所有 类
我有这样的界面:
public interface IFoo : IInject
{
string GetOrder();
}
要自动注册 IFoo,我可以这样在 Ninject 中做到这一点:
kernel.Bind(c =>
c.FromAssembliesMatching("Core.*.dll")
.SelectAllIncludingAbstractClasses()
.InheritedFrom<IInject>()
.BindAllInterfaces());
但在温莎城堡我不能。
如果你必须知道 IInject 接口是一个空接口,只是为了触发自动注册:
public interface IInject
{
//Nothing in this interface
}
如何在 Castle Windsor 中使用此 MATCHING 或 CONTAINING 模式?
谢谢,
您的问题标题询问的是按名称空间进行匹配,而在问题本身中您询问的是标记界面。
Windsor 两者皆有可能。
在提供答案之前,我强烈建议通读 Windsor's documentation。 Ninject 和温莎在理念上存在一些显着差异,它将帮助您避免将来可能遇到的麻烦。
现在,回到你的问题,如果你想通过命名空间注册,你会做这样的事情:
container.Register(Classes.FromThisAssembly()
.InSameNamespaceAs<IInject>()
.WithService.DefaultInterfaces() // or whatever makes sense
.LifestyleTransient()); // or whatever makes sense
对于通过标记界面注册,你会像这样:
container.Register(Classes.FromThisAssembly()
.BasedOn<IInject>()
.WithService.DefaultInterfaces() // or whatever makes sense
.LifestyleTransient()); // or whatever makes sense
同样,不要只是 copy/paste 代码,还要确保 fully understand what it does here.
我在写这篇文章之前检查了很多答案和文章,但我没有成功。
我想注册从 1 个特定接口 IInject
我有这样的界面:
public interface IFoo : IInject
{
string GetOrder();
}
要自动注册 IFoo,我可以这样在 Ninject 中做到这一点:
kernel.Bind(c =>
c.FromAssembliesMatching("Core.*.dll")
.SelectAllIncludingAbstractClasses()
.InheritedFrom<IInject>()
.BindAllInterfaces());
但在温莎城堡我不能。 如果你必须知道 IInject 接口是一个空接口,只是为了触发自动注册:
public interface IInject
{
//Nothing in this interface
}
如何在 Castle Windsor 中使用此 MATCHING 或 CONTAINING 模式?
谢谢,
您的问题标题询问的是按名称空间进行匹配,而在问题本身中您询问的是标记界面。
Windsor 两者皆有可能。
在提供答案之前,我强烈建议通读 Windsor's documentation。 Ninject 和温莎在理念上存在一些显着差异,它将帮助您避免将来可能遇到的麻烦。
现在,回到你的问题,如果你想通过命名空间注册,你会做这样的事情:
container.Register(Classes.FromThisAssembly()
.InSameNamespaceAs<IInject>()
.WithService.DefaultInterfaces() // or whatever makes sense
.LifestyleTransient()); // or whatever makes sense
对于通过标记界面注册,你会像这样:
container.Register(Classes.FromThisAssembly()
.BasedOn<IInject>()
.WithService.DefaultInterfaces() // or whatever makes sense
.LifestyleTransient()); // or whatever makes sense
同样,不要只是 copy/paste 代码,还要确保 fully understand what it does here.