Windows Store/WinRT應用程序的反思與我以前的不同。我如何重構此代碼塊以使用WinRT?如何使此反射與WinRT一起使用
注意:此代碼塊在PCL中工作,不針對Windows應用商店應用程序。 (Profile104)。只要我將目標更改爲Profile158,它就不會再編譯了。
var migrationInterfaceType = typeof (IMigration);
var migrations =
migrationInterfaceType.Assembly.GetTypes()
.Where(type => migrationInterfaceType.IsAssignableFrom(type) && !type.IsAbstract)
.OrderBy(type => type.Name);
// Cannot resolve symbol 'Assembly'
// Cannot resolve symbol 'IsAssignableFrom'
本質上講,我們有一個名爲IMigration
的接口。然後我們有一個繼承IMigration的抽象類(Migration
)。從那裏我們創建我們的遷移如下。
public class Migration001 : Migration{
}
public class Migration002 : Migration{
}
// and so on.
我正在與需要做掙扎的代碼是提取所有遷移到一個IEnumerable <>讓我能在他們環路,爲了運行它們。正如我之前所說的,第一個代碼塊時,它不針對WinRT的工作,但現在它需要,它不會編譯由於
// Cannot resolve symbol 'Assembly'
// Cannot resolve symbol 'IsAssignableFrom'
我曾嘗試兩種不同的方法,但兩者產生的任何結果在IEnumberable <>
失敗的嘗試ONE
var migrations =
typeof(IMigration).GetTypeInfo().Assembly.DefinedTypes
.Where(type => type.IsSubclassOf(typeof(IMigration)) && !type.IsAbstract)
.OrderBy(type => type.Name);
// enumeration yielded no results
失敗的嘗試TWO
var migrationInterfaceType = typeof (IMigration);
var migrations = migrationInterfaceType.GetTypeInfo().Assembly.DefinedTypes
.Where(type => migrationInterfaceType.GetTypeInfo().IsSubclassOf(type.GetType()) && !type.IsAbstract)
.OrderBy(type => type.Name);
// enumeration yielded no results
以防萬一你想知道,這裏是我如何運行遷移......沒有什麼特別的。
foreach (var migration in migrations)
{
Run(_serviceLocator.GetInstance<IMigration>(migration.Name));
}
什麼是失敗的嘗試的結果,並且你會期待什麼呢?你做[研究](http://msdn.microsoft.com/en-us/library/hh535795(v = vs.110).aspx)?你的第一個評論中的錯誤(你真的應該讓問題更清楚)被回答[這裏](http://stackoverflow.com/questions/7612186/getting-a-type-assembly-in-windows-8),第二個可能會消失。 – CodeCaster
是的,我一直在研究。結果是一個空的'IEnumerable <>'。第一個代碼塊WORK S,而不需要定位Windows應用商店應用。 –
問題是你沒有解釋代碼應該做什麼。你只在註釋中輸入兩個編譯器錯誤,並說它_「不能與WinRT正常工作」_。你應該知道這不是一個準確的問題描述。我想現在通過_「**失敗嘗試**」_你的意思是_「返回一個空的IEnumerable <>'」_,但是這也沒有告訴我們你期望它返回什麼。如果你可以提供更多關於你想要做的事情的信息,它會非常有幫助你的問題。我知道足夠的反思猜測,並與我發現[這](http://stackoverflow.com/questions/7612186/)。 – CodeCaster