注册包含嵌套接口的类

时间:2016-03-15 10:04:33

标签: c# interface nested castle-windsor

我试图注册一些具有嵌套接口的类。 但由于某些原因,我似乎无法解决子接口问题。 我相信一些代码应该让我的意图明确,所以我们走了:

public interface IDatasetContentMarshaller<TIn, TOut> : IDatasetContentMarshallerInfo
{
    TOut Marshall(CompanyDataset dataset, TIn content);
}

public interface IDatasetContentMarshallerInfo
{
    Type SourceType { get; }
    Type TargetType { get; }

    bool CanMarshal(object source);
    object Marshall(CompanyDataset dataset, object source);
}

public interface IGenericDatasetContentMarshaller
{
    TOut Marshall<TIn, TOut>(CompanyDataset dataset, TIn source);

    Func<CompanyDataset, TIn, TOut> GetMarshaller<TIn, TOut>();
}

当已知并修复了转换的源和目标类型时,代码将使用具有泛型类型参数的第一个接口。而且可以肯定的是,有一个类可以进行这种转换。

子接口(IDatasetContentMarshallerInfo)包含有关转换类型的更多信息。当输入参数或返回值的类型在编译时未知时,或者如果没有可以在一个步骤中执行此操作的转换器/编组器时,最后一个接口用于获取编组器。 (示例&#39;字符串&#39;到&#39;学期&#39;可能需要&#39;字符串&#39;到&#39;日期&#39;后跟&#39; date&#39; to& #39; semester&#39 ;.通用内容编组员的任务是找到一个链式编组器来获得所需的结果。)

IGenericDatasetContentMarshaller的构造函数如下所示:

public GenericDatasetContentMarshaller(IDatasetContentMarshallerInfo[] marshallers)
{
    Marshallers = marshallers;
}

但我无法找到正确注册的方法。 无论我尝试什么,我都会收到错误,告诉我IGenericDatasetContentMarshaller无法解决。

我为此编写的安装程序如下所示:

public class MarshallerInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.Kernel.Resolver.AddSubResolver(new ArrayResolver(container.Kernel));

        container.Register(Classes.FromThisAssembly().BasedOn<IDatasetContentMarshallerInfo>().LifestyleSingleton());

        container.Register(Classes.FromAssemblyContaining<GenericDatasetContentMarshaller>()
            .Where(Helper.IsInNamespace("Q.Services.Marshallers.Dataset"))
            .LifestylePerWebRequest()
            .WithService.FirstInterface());

        var count = container.ResolveAll(typeof(IDatasetContentMarshallerInfo)).Length;
        Console.WriteLine("Items: " + count); // logs "Items: 0"
    }
}

所以我的问题是:

  1. 是否可以使用嵌套接口?
  2. 如果是这样的话:你如何注册这些课程
  3. 欢迎任何有关此主题的帮助。

    PS:有可能解决&#34; top&#34;如果我要求注入像IDatasetContentMarshaller<DateTime, Semester>

    这样的特定类型,请使用

0 个答案:

没有答案