Tôi có một số plugin dưới dạng tệp dll. Ứng dụng của tôi tải dll và nó chạy tốt. nhưng khi tôi cố gắng xóa các plugin cũ và thay thế nó bằng một plugin mới, nó không cho phép tôi làm điều đó. vì nó đã được tải bởi ứng dụng. Tôi đã thấy rằng bằng cách sử dụng appdomain chúng ta có thể làm điều đó. nhưng tôi không thể tìm thấy một giải pháp trong đó mef được sử dụng.Dỡ một tập tin dll vào mef
Tôi cần mã có thể chạy trên mef. Dưới đây là mã của tôi được sử dụng để tải các plugin.
//Creating an instance of aggregate catalog. It aggregates other catalogs
var aggregateCatalog = new AggregateCatalog();
//Build the directory path where the parts will be available
var directoryPath = "Path to plugins folder";
//Load parts from the available dlls in the specified path using the directory catalog
var directoryCatalog = new DirectoryCatalog(directoryPath, "*.dll");
//Add to the aggregate catalog
aggregateCatalog.Catalogs.Add(directoryCatalog);
//Crete the composition container
var container = new CompositionContainer(aggregateCatalog);
// Composable parts are created here i.e. the Import and Export components assembles here
container.ComposeParts(this);
cần có một giải pháp này. tôi nghe nói rằng điều này sẽ được phát hành tiếp theo. không biết đó là sự thật hay không. –
@fhnaseer Không - ít nhất là không có bất cứ điều gì được hiển thị công khai cho đến nay. Điều này thực sự nằm ngoài trường hợp sử dụng dự định cho MEF, vì vậy tôi nghi ngờ nó sẽ xảy ra ở đó. Cách duy nhất được hỗ trợ để loại bỏ một assembly trong CLR là dỡ bỏ toàn bộ AppDomain. MEF, là một thư viện, không thể "làm việc xung quanh" được điều đó. –
thì ý nghĩa của "AllowRecomposition = true" trong ImportMany là gì. Nếu tôi viết nó hay hành vi không giống nhau. –