首先,我知道標題不是很好,但事實是我甚至不知道如何解釋我的問題;我將在下面展示一個我想要做的事例:類型推斷問題:非泛型方法的泛型方法參數
編輯:我應該給出一個更好的例子來開始;讓我們再試一次:
// MyAppComponentModel.dll
namespace MyAppComponentModel {
using System.Collections;
interface IResource { }
interface IStringResource : IResource { }
interface IIconResource : IResource { }
interface IDialogResource : IResource { }
interface IResourceProvider {
void GetResource<T>(out T result, IDictionary criteria = null) where T : IResource;
}
}
// ThirdPartyLib.dll
namespace ResourceProviderLibA {
using System.Collections;
using System.ComponentModel.Composition;
using MyAppComponentModel.
public sealed class StringResource : IStringResource { ... }
public sealed class IconResource : IIconResource { ... }
[Export(typeof(IResourceProvider))]
public sealed class StringAndIconResourceProvider : IResourceProvider {
void IResourceProvider.Get<T>(out T result, IDictionary criteria) {
if (typeof(T) == typeof(IDialogResource))
throw new NotSupportedException();
this.InternalGet(out result, criteria);
}
void InternalGet(out IStringResource result, IDictionary criteria) {
result = new StringResource();
...
}
void InternalGet(out IIconResource result, IDictionary criteria) {
result = new IconResource();
...
}
}
}
// MyMefTestApp.exe
namespace MyMefTestApp {
using System.Collections.Generic;
using System.ComponentModel.Composition.Hosting;
using MyAppComponentModel.
static class Program {
[ImportMany(typeof(IResourceProvider))]
private IEnumerable<IResourceProvider> mProviders;
static void Main(String[] args) {
foreach (var provider in this.mProviders) {
...
}
}
}
}
我知道這是在某種程度上可能的,我堅信我做了這樣的事情曾經只是不記得如何。任何人?
我已經知道這可以通過反射完成,所以請跳過這些解決方案 - 謝謝。
我已將示例代碼更新爲更實用的示例;請看看它,看看它是否以任何方式改變你的答案。我真的需要一些幫助,或者至少有一個「良好的編程」方式來解決這個問題。 – gplusplus 2011-02-13 00:39:58