簡體   English   中英

C#統一泛型接口和抽象類

[英]c# unity generics interface and abstract class

我有一個interface

public interface IMigrationSchema<T> 
{
    T MapEvent(IOtherEvent sourceEvent);
}

abstract類實現:

public abstract class MigrationSchema<T> : IMigrationSchema<T>
{
    public abstract T MapEvent(IOtherEvent sourceEvent);
}

然后是我的MigrationSchema的實際實現:

public class MigrationSchemaImpl: MigrationSchema<EventAfterMigration>
{
    public MigrationSchemaImpl()
        : base()
    {
    }

    public override EventAfterMigrationMapEvent(IOtherEvent actualSourceEvent)
    {
        return new EventAfterMigration(actualSourceEvent);
    }
}

知道:

public class EventAfterMigration : BaseEvent

我理想地要做的是:

var migrationSchema = container.Resolve<IMigrationSchema<BaseEvent>>();

並在我的配置文件中:

<register type="IMigrationSchema`1[[MyApp.BaseEvent, MyApp]]" mapTo="MigrationSchemaImpl">

我知道這似乎很抽象,我已經測試了很多可能性,但是每次我收到InvalidCastException時都說

MigrationSchemaImpl cannot be cast to IMigrationSchema1[BaseEvent]

我覺得這完全可行,但我缺少一些簡單的東西。 任何幫助表示贊賞!

使用這種類型,類型之間的關系不會神奇地變成通用接口/類型之間的關系。 MigrationSchemaImpl實現IMigrationSchema<EventAfterMigration>而不是IMigrationSchema<BaseEvent> -因此,您不能將一個轉換為另一個(帶有或不帶有Unity)。

您將通過簡單的代碼得到相同的錯誤:

var base = (IMigrationSchema<BaseEvent>)
     (new MigrationSchemaImpl());

您可以嘗試使用方差IMigrationSchema<in BaseEvent>不知道它會在你的情況下幫助)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM