Autofac-如何将一个类<,>注册到接口<>上
我正在尝试注册我的存储库类,该类别是两个通用参数到存储库接口(一个参数generic). public class RepositoryBase : IDataAccess public interface IDataAccess 解决方案 AUTOFAC不知道如何在接口中提供一个通用参数时如何设置RepositoryBase的第二个通用参数.因此,除非您对 object , dynamic 或某些基础类满意,否则您需要以某种方式指定第二个参数才能实例化服务.为了实现这一目标,您可以创建这样的工厂: public class BaseRepositoryFactory : IDataAccessFactory { private readonly IComponentContext context; public BaseRepositoryFactory(IComponentContext context)
6 2024-04-26
编程技术问答社区
为一个已知类型为T的通用接口构建一个System.Type。
问题描述 我有一个接口定义IFoo : IFoo和一个方法CreateFooUsingBarType(Type barType).我需要使用定义TBar的指定的System.Type 实例System.Type 实例来解决IFoo的方法.不要问我如何到这里.我被困在这些边界中. 示例 public IFoo CreateFooUsingBarType(Type barType) { var iocScope = GetScope(); // TODO: Create a System.Type for IFoo // where TBar is barType. Blarghity blargh. var fooType = (Type)null; return iocScope.Resolve(fooType); } 我已经尝试用 typebuilder ,但我觉得这太过杀了. .N
0 2024-04-26
编程技术问答社区
如何在SimpleInjector中用构造函数注册通用类型?
我使用Microsoft Unity作为IOC容器,并编写了一些这样的代码: public static void RegisterTypes(IUnityContainer container) { MyContext ctx = new MyContext (); // is EntityFramework DbContext container.RegisterType(typeof(IEntityRepository), typeof(EntityRepository), new InjectionConstructor(ctx)); container.RegisterType(typeof(IEntityService), typeof(EntityService))
三层应用中的Ninject
我正在构建一个标准的三层应用程序. 1个前端的控制台应用 2业务逻辑层 3数据层 主要目的是从数据库表显示一些客户数据. 我试图通过没有从控制台到数据层的引用来遵循"依赖项注入"书中的指南,而从业务层到数据层的指南.如果需要,可以轻松地交换前端和数据层. 假设我在名为CustomerService的业务层中有一项服务,它具有GetCustomers()方法 CustomerService的构造函数ICustomerRepository so public class CustomerService { ICustomerRepository repository; public CustomerService(ICustomerRepository repository) { this.repository = repository; } public ICol
Castle Windsor IoC属性注入。在子类构造函数中使用基类的属性
我的基类如下 public class BaseClass { public ISomeObject Property { get; set; } } 和从基督教继承的孩子级.我需要在ChildClass构造函数中使用属性,但它不是由IOC初始化的,而是我想要的,并且具有值null.如果我在ChildClass的方法中使用它,则将初始化属性. 我在做什么错? 这是我在IOC容器中注册的ismoobject container.Register( Component.For() .ImplementedBy().LifestyleSingleton()); 解决方案 这不是Windsor城堡的问题,而是.NET的工作方式.该构造函数作为.NET框架的一部分,实例化了类的新实例.只有在施工完成后,其他代码(例如Windsor)在其上设置属性或执行方法. 如果要在子类构造函数内可用Proper
0 2024-04-26
编程技术问答社区
在基类的构造函数中添加一个新的参数,意味着我必须重构所有继承于它的类?
我正在使用控制容器的温莎城堡倒置. 我发现,如果我需要通过基类中的构造函数注入新组件,那么从中继承的所有子类都需要将该组件传递给基地的构造函数.这是预期的. 但是,如果我有数十名从那个基类继承的孩子,以及数十个单位测试实例化了这些儿童课程.我真的需要经过所有这些构造函数和对这些构造函数的调用吗?我是否缺少一种设计模式,可以让我轻松修改基类构造函数,而不必重新分配该类别的所有孩子? 解决方案 我认为您问题的直接解决方案将是将基类的依赖性打包到新类,例如BaseDependencies,在这种情况下,在这种情况下,在这种情况下,您只需要添加一个如果基类有新的依赖性,则为BaseDependencies的新成员. 代码将是这样的: class Base { public Base(BaseDependencies d) {} } class BaseDependencies { public DependencyA {get; set;} public Depend
4 2024-04-26
编程技术问答社区
MEF 2中的默认构造函数和开放泛型使用惯例
我试图在项目中使用MEF 2,通常使用简单注射器,但这次我想尝试MEF.我的主要问题是处理开放式通用物,这是我到目前为止得到的 public interface ISetting {} public class Setting : ISetting {} public interface ILogger { TLog Fetch() } public class Logger : ILogger { private ISetting settings; public Logger(ISetting settings) { this.settings = settings; } public TLog Fetch() { return default(TLog); } } 现在,对于容器部分,我做 var conventions = n
4 2024-04-25
编程技术问答社区
按类型使用委托工厂解决的Autofac问题
我在项目中使用AUTOFAC作为IOC.由于某些旧软件库,我必须将一些服务传递给无法解决的控制器,并且必须以参数为单位. 我使用这样的委托工厂进行了通用控制: public MyClass { private delegate TController ControllerFactory(TInterface service); protected TController _myController; protected TController Controller { get { return _controller ?? (_controller = ServiceLocator.Resolve()
4 2024-04-25
编程技术问答社区
对大型解决方案进行单元测试改造,IOC,Moq
我正在为用vb.net和c#编写的ASP.NET解决方案进行改造单元测试. 单元测试需要验证当前功能并充当检查以后的破裂变化的检查. 解决方案包括: 1 MVC Web项目 用vb.net编写(不要问,这是遗留的事情) 其他10个支持项目每个都包含逻辑分组的功能 用C#编写每个项目都包含存储库和DAL 所有类都紧密结合,因为在任何地方都没有实现控制(IOC)的倒置. 目前要测试控制器,有以下堆栈: 控制器 存储库 dal 记录 第一个问题,要正确测试单元测试,我可以设置1个测试项目并从中运行所有测试,或者我应该为每个项目设置1个测试项目以测试DLL的功能? 第二个问题,我是否需要实现IOC才能使用MOQ? 第三个问题,甚至可以将IOC重构为这样的巨大解决方案? 提出问题,尽快可以完成此操作? 解决方案 我正在为用vb.net和c#编写的ASP.NET解决方案进行改造单元测试.单元测试需要验证当前功能
2 2024-04-25
编程技术问答社区
如何将参数传递给一个依赖性通过IoC容器连接的类?
我有一个通过多个资源与网络合作的课程.它的构造函数会收到由IOC容器(structureMap)在运行时解决的参数: public NetworkWorker(IRetryService retryService, ILog log) { ... } 我需要的是控制该类在用例级别上使用的资源数量 - 例如,客户端A需要网络工作人员实例,该实例一次仅允许一个操作,而客户端B一次性需要10个操作. 目前,该数字是在构造函数中进行了硬编码的.我看到的唯一方法是添加一个方法void Configure(int resourceCount),即网络工作者的每个客户端都会以不同的值调用. 或者可能是我看不到的更好的方法? 此类可以做不同的事情,但是每个方法调用都需要资源数量(Get/Send/etc方法). P.S.这是一种已知技术(使用Configure方法)吗?如果是,它的名字是什么? SMTH喜欢"两步初始化"? 解决方案 我会假定该网络工人有多种方法(否则,
0 2024-04-25
编程技术问答社区
Ninject-使用单一接口的多个类(可有多个匹配绑定)。
如果我有人类和狗类的实现,该类别使用iperson界面以及使用IFOOD界面的人类食品和狗食类别.在我的主要功能中,如何从使用人类食品和狗食品和人类切换到狗? 当前写这本书的方式是给我一个"可用的匹配绑定,有多个匹配绑定". 谢谢! public class Bindings : NinjectModule { public override void Load() { this.Bind().To(); this.Bind().To(); this.Bind().To(); this.Bind().To(); } } static void Main(string[] args) { IKernel kernel = new Standard
6 2024-04-25
编程技术问答社区
无法使用IActivityLogger和Bot Builder for C#来记录信息
我需要记录用户和机器人之间的消息.经过一番研究,我发现了Sgambolati的这篇文章,解释了如何实现这一点: https://stackoverflow.com/a/42145416 . 但是,这种方法似乎对我不起作用.我什至尝试了他提供的相同片段,但我仍然看不到"调试输出"窗口中的日志. 这是根据他的实现的代码: 记录器类: public class DebugActivityLogger : IActivityLogger { public async Task LogAsync(IActivity activity) { Debug.WriteLine($"From:{activity.From.Id} - To:{activity.Recipient.Id} - Message:{activity.AsMessageActivity()?.Text}"); } } 我的global.asax: publi
4 2024-04-25
编程技术问答社区
在c#中创建自定义容器类
我正在为使用两个公共方法register()&resolve()和一个私有方法createInstance() 编写一个基本C#类,用于自定义IOC容器 以下是我的代码. 在以下代码中,createInstance()方法,我会收到语法错误来解决依赖关系(注释行),而无需使用generics,我可以解决依赖项,并且可以正常工作,而使用仿制药进行默认打字,我获取语​​法错误 有人可以在这条评论的线上帮助我吗? public class Container { static Dictionary> registrations = new Dictionary>(); public static void Register() where TImpl : TService { registrations.Add(ty
2 2024-04-25
编程技术问答社区
通过密钥和自动注册的SimpleInjector解决实例问题
我正在尝试 key by键解决实例用简单注射器. 就我而言,键是来自配置文件的字符串,我需要工厂基于字符串返回正确的类型. 我使用了类似的解决方案,例如上面链接中所述的解决方案,但略微更改了它,因此实例可以提供自己的键. (将有许多实现IFoo的类,所以我想用 将它们自动注册) ) 这是一个完整的工作示例(.NET Core Console App): (我一直保持不可读性,所以只有一个实现IFoo的类,我省略了自动注册代码) using SimpleInjector; using System; using System.Collections.Generic; namespace SimpleInjectorTest1 { public interface IFoo { string Name { get; } } public class SpecificFoo : IFoo {
10 2024-04-25
编程技术问答社区
之间的差异和相似之处。ViewModelLocator, ServiceLocator, Dependency Injection
我对模式感到困惑:ViewModelLocator,ServiceLocator,Dependency Injection. 最新的结论如下: ViewModelLocator.连接View和ViewModel的地方. public ViewModelLocator() { SimpleIoc.Default.Register(); SimpleIoc.Default.Register(); } public MainViewModel MainViewModel => SimpleIoc.Default.GetInstance(); public SettingViewModel SettingViewModel => SimpleIoc.Default.GetInstance(); // View private M
0 2024-04-24
编程技术问答社区
ViewModel构造函数如何获得所需的接口?
我的问题基于 ServiceLocator包含登记服务和视图模型的方法Configure().使用方法GetService()我们可以得到它.例如,ProductView.cs: ViewModel = ServiceLocator.Current.GetService(); 每个*ViewModel包含带有接口的构造函数,例如: public ProductDetailsViewModel(IProductService productService, IFilePickerService filePickerService, ICommonServices commonServices) 我无法理解ViewModel用来将此类接口进入其构造函数的magi².因此没有这样的行: ... = new ProductDetailsViewModel(productService, filePickerServ
10 2024-04-24
编程技术问答社区
我怎样才能让MEF容器注入自己
我正在使用MEF组成容器使用构造函数注入,我想知道如何以他提供的对象为例. 解决方案 您可以使用这是一个样本: class Program { static void Main(string[] args) { var container = new CompositionContainer(new ApplicationCatalog()); Console.WriteLine("Main: container [{0}]", container.GetHashCode()); container.ComposeExportedValue(container); var exp = container.GetExportedValue(); Console.ReadKey();
10 2024-04-24
编程技术问答社区
Unity InjectionConstructor通常在什么时候运行?
我有以下代码: IOC.Container.RegisterType ("Customers", new InjectionConstructor(new CustomerEntities())); 我想知道的是,当发生类型注册时,还是每次irepository(使用名称"客户")解决时,是否会调用一次new CustomerEntities(). 如果不是后者,那么是否有办法使其更像代表? (因此,它每次解决时都会成为新的?) 我找到了此代码: IOC.Container.RegisterType("Customers") .Configure() .ConfigureInjectionFor
4 2024-04-24
编程技术问答社区
MVVM-在ViewModels中使用实体
我真的只是从MVVM,IOC和依赖注入开始,我遇到了一个绊脚石,我不知道该如何解决,但我确实理解了为什么会发生. 我将Windsor用于DI和IOC功能以及MVVM Light作为WPF应用程序中的MVVM框架.使用以下是MainPageViewModel类中的唯一其他代码. public ObservableCollection Groups { get { var groupVms = new ObservableCollection(); IEnumerable groups = _repository.GetAllGroups(); foreach (Group g in groups) { var vm = new GroupViewModel(g); group
8 2024-04-24
编程技术问答社区
如何通过将其名称用作字符串动态解析IOC
我对同一接口有多个实现,如以下示例 container.Register(Component.For().ImplementedBy()); 或 container.Register(Component.For().ImplementedBy()); 解决方案必须取决于数据库中的淡淡,我将从数据库中以" schoolservicecore.schoolsprovider.schoolservice"或 " complyServiceCore.companyprovider.companys
8 2024-04-24
编程技术问答社区