[英]How to load a MEF component from another assembly in .net core 2.1
我只是在MEF領域邁出了第一步,並希望使用.net core 2.1做到這一點。
使用VS 2017(版本15.8.8),我已經完成了帶有界面的小型控制台應用程序(.NET Core)
interface IMessageSender
{
void Send(string message);
}
和一個實現(在同一項目中)
[Export(typeof(IMessageSender))]
public class EmailSender : IMessageSender
{
public void Send(string message)
{
Console.WriteLine("EmailSender : " + message);
}
}
最后,我從Main(string [] args)執行了一個小的compose方法
[Import]
private void Compose()
{
var assembly_A = new[] { typeof(Program).GetTypeInfo().Assembly };
var config_A = new ContainerConfiguration().WithAssembly(assembly_A[0]);
var container_A = config_A.CreateContainer();
var msg_A = container_A.GetExport<IMessageSender>();
msg_A.Send("Hello");
}
它按預期工作
但是,如果我在解決方案中添加新的類庫,並將Send(string)的實現移動到新添加的項目中,則無法進行。
namespace AnotherMefExtensionProjectNamespace
{
[Export(typeof(IMessageSender))]
public class EmailSenderExtended : IMessageSender
{
public void Send(string message)
{
Console.WriteLine("EmailSenderExtended : " + message);
}
}
}
新的撰寫方法
[Import]
public IMessageSender MessageSender { get; set; }
private void Compose()
{
var assembly_B = new[] { typeof(EmailSenderExtended).GetTypeInfo().Assembly };
var config_B = new ContainerConfiguration().WithAssembly(assembly_B[0]);
var container_B = config_B.CreateContainer();
var msg_B = container_B.GetExport<IMessageSender>();
msg_B.Send("Hello");
}
我試圖比較不同的配置和容器(示例中的_A與_B),但無法理解有什么不同。 我什至嘗試將類ContainerConfiguration擴展為從指定的程序集中加載,並且只要給定文件包含Main方法,它就可以工作,但是如果使用“擴展的.NET Core類庫”,則失敗。
public static ContainerConfiguration WithChosenAssembly(this ContainerConfiguration configuration, string pathAndFile)
{
var context = AssemblyLoadContext.Default.LoadFromAssemblyPath(pathAndFile);
var ass_list = new List<Assembly>() { context };
configuration = configuration.WithAssemblies(ass_list, null);
return configuration;
}
我的印象是,您可以通過開發基本實現指定接口的類庫來擴展主應用程序。 我目前似乎無法執行此操作,但顯然我誤解了一些非常基本的內容。
如果有人願意讓我走上正確的道路,或者給我一個替代想法,以開發.net core的“插件”,我將不勝感激。
國王問候馬格努斯
我意識到我的測試設置無法模擬任何現實情況,因此我將自己的問題帶給了自己。
顯然我應該有三個項目。
回顧我的示例並堅持上面顯而易見的“設計”,所有這些工作均應按預期進行。 大多數StackOverflow用戶可能不會誤入歧途,但對於那些這樣做的用戶,希望以上內容對您有所幫助。 :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.