gpt4 book ai didi

.net - CaSTLe.Windsor 可以自动解析具体类型吗

转载 作者:行者123 更新时间:2023-12-04 15:05:13 24 4
gpt4 key购买 nike

我们正在评估 C# 项目的 IoC 容器,Unity 和 CaSTLe.Windsor 都脱颖而出。我喜欢 Unity(NInject 和 StructureMap 也这样做)的一件事是,很明显如何构造它们的类型不必向 IoC 容器注册。

有没有办法在 CaSTLe.Windsor 中做到这一点?我对 CaSTLe.Windsor 说它不这样做是否公平?是否有故意不这样做的设计原因,还是疏忽,或者只是不被视为重要或有用?

我知道 container.Register(AllTypes...在温莎,但这不是一回事。它不是完全自动的,而且非常广泛。

为了说明这一点,这里有两个 NUnit 测试通过 Unity 和 CaSTLe.Windsor 做同样的事情。 CaSTLe.Windsor 一个失败了。 :

namespace SimpleIocDemo
{
using NUnit.Framework;
using Castle.Windsor;
using Microsoft.Practices.Unity;

public interface ISomeService
{
string DoSomething();
}

public class ServiceImplementation : ISomeService
{
public string DoSomething()
{
return "Hello";
}
}

public class RootObject
{
public ISomeService SomeService { get; private set; }

public RootObject(ISomeService service)
{
SomeService = service;
}
}

[TestFixture]
public class IocTests
{
[Test]
public void UnityResolveTest()
{
UnityContainer container = new UnityContainer();
container.RegisterType<ISomeService, ServiceImplementation>();
// Root object needs no registration in Unity
RootObject rootObject = container.Resolve<RootObject>();
Assert.AreEqual("Hello", rootObject.SomeService.DoSomething());
}

[Test]
public void WindsorResolveTest()
{
WindsorContainer container = new WindsorContainer();
container.AddComponent<ISomeService, ServiceImplementation>();

// fails with exception "Castle.MicroKernel.ComponentNotFoundException:
// No component for supporting the service SimpleIocDemo.RootObject was found"
// I could add
// container.AddComponent<RootObject>();
// but that approach does not scale
RootObject rootObject = container.Resolve<RootObject>();
Assert.AreEqual("Hello", rootObject.SomeService.DoSomething());
}
}
}

最佳答案

温莎不支持开箱即用,这是一个深思熟虑的决定。见 this answer更多细节。

但是,通过延迟注册未注册的组件,根据请求,可以很容易地扩展更高版本以支持这种情况。
您必须实现 ILazyComponentLoader界面,这将占用 5 行代码。见 here举个例子。

尽管我在 2018 年的建议与 2009 年的建议相同 - 除非在 否则不要这样做非常您有 的特定场景非常选择这种方法而不是替代方法的充分理由

关于.net - CaSTLe.Windsor 可以自动解析具体类型吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1955579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com