Tag: factory

NInject扩展工厂

在阅读了NInject v3上的新文档以及如何使用Factory Extension之后 ,显然我仍然没有完全得到它,因为我的代码抛出exception到处… 我得到了这个例外,如果人们愿意,我可以粘贴整个东西,但我会尽量保持简短。 激活IDeployEntityContainer时出错没有匹配的绑定可用,并且该类型不可自我绑定。 这是我的代码…… Ninject Bind Module类 class MyNinjectModule : NinjectModule { public override void Load() { … Bind().ToFactory(); Bind().To(); … } } 使用工厂的类 class DeployController : IDeployController { private readonly IDeployEntityFactory _entityFactory; public DeployController(…, IDeployEntityFactory entityFactory) { … } public void Execute() { … //I get the Exception on this line… […]

基于非实现接口的通用约束

我有一个带有工厂服务的应用程序,允许构建实例,同时解决必要的dependency injection。 例如,我使用它来构建对话框视图模型。 我有一个服务接口,如下所示: public interface IAsyncFactory { Task Build() where T: class, IAsyncInitialize; } 理想情况下,我想拥有的是这样的(伪语法,因为这不是直接可实现的) public interface IFactory { Task Build() where T: class, IAsyncInitialize; T Build() where T: class, !IAsyncInitialize; } 这里的想法是,如果一个类支持IAsyncInitialize ,我希望编译器解析为返回Task的方法,以便从消费代码中明显看出它需要等待初始化。 如果该类不支持IAsyncInitialize ,我想直接返回该类。 C#语法不允许这样做,但是有不同的方法来实现我的目标吗? 这里的主要目标是帮助提醒消费者类的实例化它的正确方法,这样对于具有异步初始化组件的类,我不会在初始化之前尝试使用它。 我能想到的最接近的是创建单独的Build和BuildAsync方法,如果为IAsyncInitialize类型调用Build,则会出现运行时错误,但这没有在编译时捕获错误的好处。

自定义’ExportFactory’

使用MEF的桌面应用程序导入许多“ServiceProviders”。 每个部分(ServiceProvider)都是一个单独的DLL内的类。 所有DLL都在“插件”文件夹中,供桌面应用程序使用。 由于我需要新部件的实例,因此ExportFactory是最佳选择。 问题是我的部件有构造函数。 我需要将一些参数传递给ExportFactory (MEF2,Preview2)不支持的部件的构造函数。 我需要这样的东西: // Each part has its own dependency Dependency dependency = LoadDependency(myPart.Metedata[“Name”]); // Injecting dependency into part’s constructor myPart.CreateExport(dependency); 我不想从我的零件方面导入任何东西。 可以在此处找到示例项目(带无参数构造函数)。

方法工厂 – 案例与反思

前几天我遇到了一些代码,我想知道这是否是最好的方法。 我们有一个方法,从一些Web表单数据中获取一个字符串,根据传入的字符串对某个对象执行操作。目前,它使用reflection来计算要采取的操作,但我想知道switch语句是否会更好。 例: 编辑:我为Lucerno指出的代表添加了第三个选项 public class ObjectManipulator { private void DoX(object o) { } private void DoY(object o) { } private void DoZ(object o) { } public void DoAction(string action, object o) { switch (action) { case “DoX”: DoX(o); break; case “DoY”: DoY(o); break; case “DoZ”: DoZ(o); break; default: throw new Exception(string.Format( “Cannot locate action:{0}”, […]

Delphi类的C#

我知道之前已经问过这个问题,但我还没有看到一个简短明了的答案,所以我希望他们不会删除这个问题,现在我会得到一个明确的答案: 我目前在C#5.0工作; .NET 4.5; VS 2012.虽然我已经用C#做了很多,但我主要是Delphi人。 在Delphi中,我已经编写了数百个使用以下设计的类工厂(这里很简单): unit uFactory; interface type TClassofMyClass = class of TMyClass; TFactoryDict = TDictionary; var fDict:TFactoryDict; implementation procedure initDict; begin fDict:=TFactoryDict.create; fDict.add(myEnum1, TMyClass1); fDict.add(myEnum2, TMyClass2); fDict.add(myEnum3, TMyClass3); end; function Factory(const aEnum: TMyEnum): TMyClass; var ClassofMyClass: TClassofMyClass; begin if fDict.TryGetValue(aEnum, ClassofMyClass) then result := ClassofMyClass.Create(aParam); end; end. 现在:我如何在C#中做这样的事情?! 似乎C#中没有 ‘类’类型。 我错过了什么吗? […]