将Castle Object作为Resolve中的参数发送

时间:2014-08-14 16:21:41

标签: c# castle-windsor

我有一个类构建器,它使用以下参数:

public FolderAndFileManagment(IWindsorContainer container)
{
    var config = container.Resolve<IEcommerceConfiguration>();

    ReadFolderLocation = config.ReadFolderLocation;
    DropFolderLocation = config.DropFolderLocation;
    directoryRepository = container.Resolve<IDirectoryRepository>();

}

组件的注册如下所示:

WindsorContainer.Register(Component.For<IFolderAndFileManagment>().ImplementedBy<FolderAndFileManagment>().Named("FolderAndFileManagment")
                             .Attribute("id").Eq("FolderAndFileManagment")
                             .Attribute("service").Eq(typeof(IFolderAndFileManagment).AssemblyQualifiedName)
                             .Attribute("type").Eq(typeof(FolderAndFileManagment).AssemblyQualifiedName)
                             .LifeStyle.Transient);

对解析器的调用如下:

public static bool Initialize(IWindsorContainer container)
{
    _container = container;
    var config = _container.Resolve<IEcommerceConfiguration>();
    _fileManagment = _container.Resolve<IFolderAndFileManagment>(_container);
    return true;
}

但是使用resolve函数时出现以下错误:

  

缺少依赖性。   组件FolderAndFileManagment依赖于Castle.Windsor.IWindsorContainer,无法解析。   确保依赖项在容器中作为服务正确注册,或者作为内联参数提供。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您正在使用Resolve的重载:

T Resolve<T>(object argumentsAsAnonymousType);

因此,您需要创建一个anonymous type,其字段名称与您尝试解析的类型的构造函数中的参数相匹配。由于您的构造函数是:

public FolderAndFileManagment(IWindsorContainer container)

您应该像这样致电Resolve

fileManagment = _container.Resolve<IFolderAndFileManagment>(
                    new { container = _container });

答案 1 :(得分:0)

你正在做一些你自己TypeFactory的实现。为什么不使用它?它非常强大。