尝试使用动态或匿名类型的方法创建接口,但使用另一个类型的实现

时间:2017-03-14 18:13:27

标签: c# asp.net-mvc dependency-injection interface autofac

我试图在ASP.NET MVC中这样做。我想要一个界面

public interface IMyInterface
{
    Task<IReadOnlyCollection<SomeTypeDTO>> aAssembleResponse(dynamic aSomeContext);
}

在我的实施中,我希望得到以下内容:

public class MyInterfaceService
{
    .... //unneeded code
    public async Task<IReadOnlyCollection<SomeTypeDTO>> aAssembleResponse(
        SomeContext aSomeContext)
        return whatever     
}

我在界面中使用 dynamic 进行初始化,但我期待其他类型(在本例中为 SomeContext )。我的公司在DI方面非常重要,我真的在这里碰壁。我无法 up SomeContext - 也不会在这里使用构造函数注入方法。如果我把它留作动态它可以正常工作 - 但Autofac会疯狂并且拒绝传递它。

1 个答案:

答案 0 :(得分:0)

好的,所以我提出了解决方案,我必须责备我为此而克服的流感。但这是解决这个问题的非常简单的方法。

public interface IMyInterface
{
        Task<IReadOnlyCollection<SomeTypeDTO>> aAssembleResponse<T>(T aSomeContext);
}

然后我的实现

public async Task<IReadOnlyCollection<SomeTypeDTO>> aAssembleResponse<T>(T aSomeContext)
{
    var _SomeContext = (SomeContext)Convert.ChangeType(aSomeContext, typeof(SomeContext));
    return _SomeContext;     
}