Tag: mef

你如何使用ExportFactory

我是MEF的新手,正在尝试使用ExportFactory。 我可以使用ExportFactory根据用户插入对象创建列表吗? 样本将类似于下面显示的内容。 我可能不理解ExportFactory的使用,因为在运行时我在组合期间得到如下所示的错误。 1)没有找到与约束’((exportDefinition.ContractName ==“System.ComponentModel.Composition.ExportFactory(CommonLibrary.IFoo)”)AndAlso(exportDefinition.Metadata.ContainsKey(“ExportTypeIdentity”)AndAlso“System”匹配的有效导出)。 ComponentModel.Composition.ExportFactory(CommonLibrary.IFoo)“。Equals(exportDefinition.Metadata.get_Item(”ExportTypeIdentity“))))’,无效导出可能已被拒绝。 class Program { static void Main(string[] args) { Test mytest = new Test(); } } public class Test : IPartImportsSatisfiedNotification { [Import] private ExportFactory FooFactory { get; set; } public Test() { CompositionInitializer.SatisfyImports(this); CreateComponent(“Amp”); CreateComponent(“Passive”); } public void OnImportsSatisfied() { int i = 0; } public void CreateComponent(string […]

prism:ViewModelLocator.AutoWireViewModel =“True”对于未引用的程序集不起作用

我在引导程序中加载我的模块: protected override IModuleCatalog CreateModuleCatalog() { var moduleCatalog = new DirectoryModuleCatalog(); moduleCatalog.ModulePath = @”.\Modules”; return moduleCatalog; } 在shell项目中引用模块的项目时,它可以正常工作。 正确的ViewModels将由以下附加属性注入。 <UserControl prism:ViewModelLocator.AutoWireViewModel="True" [..] 除非删除项目引用,否则棱镜将不再设置ViewModel:ViewModelLocator.AutoWireViewModel =“True”。 有谁知道是什么原因引起的? 您可以在项目https://github.com/mfe-/Get.the.solution.Prism.Demo上观察此行为。 我怎样才能解决这个问题?

MEF是否为Singleton模式提供任何价值?

我正在研究一个MEF项目,以发现使用和实现技术。 我的第一个发现阶段是实现动态可配置和集中的数据控制器。 自定义行为的一种方法是inheritance我提供的强制执行奇点规则的类。 虽然Singleton模式在使用中受到很多诽谤,但我可能已经找到了一种可以在某种程度上validation模式存在困难的实现。 情况 假设主机导入的数据控制模块( DataController )旨在根据兄弟模块的请求为数据库提供公共管道。 我只需要一个DataController并组成一个模块,DataController必须实现IDataController。 DataProvider作为基类的实现纯粹是可选的; 但是,从DataProvider派生需要一些额外的处理。 观察 收集事实 : 静态类无法实现或扩展抽象类或接口。 仅此事实就消除了使用静态类来确保DataController的单一存在。 实现Singleton模式的DataController将确保每个应用程序域的单一存在。 DataController没有限制; 允许inheritance在Host中导入和编写的必需接口。 给定DataController的推导,Singleton模式的标准实现可能在同样的情况下具有挑战性。 建议的数据库提供了可公开访问的类:IDataController和抽象的DataProvider。 为了确保派生的DataController的单个实例,实现将需要偏离规范。 解决方案 此时,解决方案似乎很清楚。 DataHandler基类实现Singleton模式。 我并不天真地认为还有其他方法可以做到这一点。 但这是我对如何实现模式的粗略期望: // DataLibrary referenced by Host public interface IDataController { IDataController Start(); DbConnection CreateConnection(params string[] args) where TDbConnection : DbConnection, IDbConnection; } public abstract class DataProvider { // singleton […]

在目录刷新期间遇到错误,不使用新的dll

我正在尝试使用mef创建一个POC,我需要在一个准备好运行的项目中动态加载dll,为此我创建了一个控制台应用程序项目和一个类库 项目。 控制台应用程序项目的代码如下 – namespace MefProjectExtension { class Program { DirectoryCatalog catalog = new DirectoryCatalog(@”D:\MefDll”, “*.dll”); [Import(“Method1”, AllowDefault = true, AllowRecomposition = true)] public Func method1; static void Main(string[] args) { AppDomainSetup asp = new AppDomainSetup(); asp.ShadowCopyFiles = “true”; AppDomain sp = AppDomain.CreateDomain(“sp”,null,asp); string exeassembly = Assembly.GetEntryAssembly().ToString(); BaseClass p = (BaseClass)sp.CreateInstanceAndUnwrap(exeassembly, “MefProjectExtension.BaseClass”); p.run(); } } […]

在MEF合成期间处理ReflectionTypeLoadException

我在MEF中使用DirectoryCatalog来满足我的应用程序中的导入。 但是,当我尝试编写目录时,目录中有时会出现模糊的程序集导致ReflectionTypeLoadException 。 我知道我可以通过使用单独的目录或使用DirectoryCatalog上的搜索filter来绕过它,但我想要一种更通用的方法来解决问题。 有什么方法可以处理exception并允许组合继续吗? 还是有另一个更通用的解决方案吗?

尝试将MEF与MVC控制器一起使用时,CompositionContractMismatchException

我正在开发一个更大的C#MVC 4项目,该项目分为几个程序集(Core,Domain,Backend MVC,Frontend MVC等)。 我使用MEF提供的插件架构来加载和解决大多数依赖项。 现在我也想用它来加载MVC控制器。 在几十个样本中发现了典型的场景。 但我一直得到这个YSOD: 例外情况说: [CompositionContractMismatchException: Cannot cast the underlying exported value of type “XY.HomeController (ContractName=”XY.HomeController”)” to type “XY.HomeController”.] System.ComponentModel.Composition.ExportServices.CastExportedValue(ICompositionElement element, Object exportedValue) +505573 System.ComponentModel.Composition.c__DisplayClass10`2.b__c() +62 System.Lazy`1.CreateValue() +14439352 System.Lazy`1.LazyInitValue() +91 XY.DependencyManagement.SomeCustomControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) in (Path)\Core\DependencyManagement\SomeCustomControllerFactory.cs:32 System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +89 System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +305 System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback […]