c# - 使用 TypedFactoryFacility 错误吗?

标签 c# model-view-controller inversion-of-control castle-windsor

我的 IoC 容器中安装了以下工厂:

// Factory for late-binding scenarios
container.AddFacility<TypedFactoryFacility>();
container.Register(
    Component
        .For<IServiceFactory>()
        .AsFactory()
);

IServiceFactory 是:

public interface IServiceFactory
{
    T Create<T>();
    void Release(object service);
}

然后我的 Controller 看起来像这样:

public class PostsController : BaseController
{
    private readonly IServiceFactory serviceFactory;

    private LinkService linkService
    {
        get { return serviceFactory.Create<LinkService>(); }
    }

    public PostsController(IServiceFactory serviceFactory)
    {
        if (serviceFactory == null)
        {
            throw new ArgumentNullException("serviceFactory");
        }
        this.serviceFactory = serviceFactory;
    }

重点是,即使 LinkServicePerWebRequest 生活方式,我可能并不总是需要它,因此,直接注入(inject)它对我来说似乎是错误的。

不过,现在突然想到的问题是:我在这里使用容器作为服务定位器吗?

最佳答案

如果T是无限的,在这种情况下,你是。您正在将要创建的类型的知识放入接收类中。此配置最好留给负责设置容器的类。在 CaSTLe 3.0 中,您可以选择使用 Lazy<T>推迟解决,您可以在此处轻松执行此操作:

 public PostsController(Lazy<ILinkService> linkService) 
 { 
     if (linkService == null) 
     { 
         throw new ArgumentNullException("linkService"); 
     } 

     this.linkService = linkService; 
 } 

关于c# - 使用 TypedFactoryFacility 错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9471372/

相关文章:

c# - 绘制矩形多维数组

c# - MVC View 与表单绑定(bind)并在同一页面显示数据

php - Laravel 自动注入(inject)和在构造函数体中手动指定依赖有什么区别?

java - Spring xml ioc 比 Java 实例化有什么好处?

c# - T4 模板和 Assembly.Load

c# - DLL 与 Visual Studio 网络服务器一起工作,但在 IIS 中崩溃?

c# - 如何将可能是 Windows 1252 'ANSI' 编码的上传文件转换为 .NET 中的 UTF8?

iphone - 模型中的 ios 网络代码?

asp.net-mvc - 如何在asp.net mvc 中创建一个弹出窗口?

c# - 没有虚拟方法调用的.Net 中的依赖注入(inject)?