标签: inversion-of-control

有没有办法在.NET中重新编译时添加引用?

我正在使用IoC容器(Castle Windsor)来根据配置文件实例化类.如果我想从编译项目时不存在的新dll中添加类,有没有办法在不重新编译的情况下执行此操作?

编辑:由于此项目是WCF服务的服务主机,并且我想在编译后包含的类是WCF服务,我还想知道是否可以包含有关新服务的端点信息而无需重新编译.

.net castle-windsor compilation reference inversion-of-control

1
推荐指数
1
解决办法
163
查看次数

代表可以在Castle Windsor IOC容器中注册吗?

这可能是一个愚蠢的问题,但代表或事件可以在IOC容器(例如Windsor)注册吗?

我打算在应用程序启动时注册事件功能,实现策略模式.

我认为,另一种方法是简单地将任何代表包装在容器中注册.

c# events delegates castle-windsor inversion-of-control

1
推荐指数
1
解决办法
1578
查看次数

当需要不同的参数时,如何注入依赖项?

例如,我有这段代码

public class ProductService{
private IProductDataSource _dataSource = DependencyManager.Get<IProductDataSource>();
public Product Get(int id){
return _dataSource.Select(id);
}
}
Run Code Online (Sandbox Code Playgroud)

我有2个不同的数据源:

  • 仅包含1种语言的信息的XML文件,
  • 一个SQL数据库,包含许多语言的信息.

所以我为IProductDataSource创建了2个实现,用于各种数据源.但是如何将所需语言发送到SQL数据源?

  • 我将参数"language"添加到方法"IProductDataSource.Select",即使我不在XML实现的情况下使用它.
  • 在SQL实现中,我从全局状态获取语言?
  • 我将语言添加到我的SQL实现的构造函数中,但后来我不会使用我的DependencyManager并处理我自己的依赖注入.

也许我的第一个解决方案并不好.

dependency-injection inversion-of-control

1
推荐指数
1
解决办法
96
查看次数

在ASP.NET MVC 3中初始化ObjectFactory的位置?

我需要StructureMap.ObjectFactory在ASP.NET MVC 3应用程序中初始化.

ObjectFactory.Initialize(x => x.For<Db>().HttpContextScoped().Use<Db>());
Run Code Online (Sandbox Code Playgroud)

我必须做的Application_BeginRequest还是Application_Start

.net c# structuremap dependency-injection inversion-of-control

1
推荐指数
1
解决办法
2304
查看次数

MVVM Light - 简单的IoC + CommonServiceLocator?试图了解目的

所以我知道CommonServiceLocator是一个允许你切换出不同的IoC容器的中间环节,但是看一下MVVM Light的示例代码,特别是ViewModelLocator,从某种意义上说,它似乎很有意思

您将SimpleIoC注册为默认定位器,但同时在SimpleIoc默认实例上调用Register.

因此,如果您将来要撕掉SimpleIoC,这是不是意味着您需要更新所有注册电话?

另一个问题是,过去曾使用Castle Windsor,并且通过.config文件配置它们来支持加载类型,它在Windows 8场景中如何工作?

我还在尝试找到现在使用IoC的场景吗?

.net ioc-container inversion-of-control mvvm

1
推荐指数
1
解决办法
2458
查看次数

Ninject - 不同的解决方案配置

我正在开发一个应用程序并使用Ninject进行DI.我希望能够根据我使用的解决方案配置将不同的对象注入给定的方法.也就是说,在"模拟"配置模式中,我想注入一个模拟对象,并且在调试/发布配置中,我想注入一个真实对象.

阅读 Ninject和配置后,我理解XML配置提供了这样的可能性.但是,如果可能的话,我想在没有XML的情况下这样做.(我倾向于同意Ninject的注意细节不应该在已发布的产品中配置......)我也知道我可以使用预处理器指令来执行此操作.我想知道的是,如果Ninject中存在此功能,或者我需要扩展/解决方法来完成它.

c# asp.net asp.net-mvc ninject inversion-of-control

1
推荐指数
1
解决办法
525
查看次数

MEF注射容器

我正在使用MEF构建一个简单的应用程序来更好地理解它,我遇到了一个问题.该应用程序是一个简单的计算器,您可以创建新的操作.每个操作都是一个导出IOperation的类.这是ADD操作类:

[Export(typeof(IOperation))]
internal class Add : IOperation
{
    CompositionContainer _container;

    public string Name
    {
        get { return "Add"; }
    }

    public string Symbol
    {
        get { return "+"; }
    }

    public IOperand Compute(params IOperand[] operands)
    {
        IOperand result = _container.GetExportedValue<IOperand>();
        result.Value = operands.Sum(e => e.Value);
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

(IOperand是一个只暴露double的接口.原因是在版本2中你可以有一个类似"(2 + 2)*4"的表达式)

我可以看到的问题是,_container当我点击时,它是null Compute.当容器组成一个时,就会创建这个具体的类[ImportMany(typeof(IOperation))].所以我的问题是:有没有办法告诉容器谁反转控制将自己的引用传递给这个对象?

PS:我不想_container公共财产.

Edit1:到目前为止,这是IOperand的唯一实现:

[Export(typeof(IOperand))]
public class SimpleResult : IOperand
{
    private double _value;
    public double Value
    { …
Run Code Online (Sandbox Code Playgroud)

c# dependency-injection mef inversion-of-control

1
推荐指数
1
解决办法
3402
查看次数

Laravel 4:如何在雄辩的模型中注入另一个类

我正在尝试使用内置的laravel的Ioc容器在Page模型中注入一个PageManager类,我有点迷失.

我想要实现的是这样的:

class Pages extends Eloquent {

    public function __construct(PagesManagerInterface $manager, array $attributes = array()) 
    {
        parent::__construct($attributes);
        $this->manager = new $manager;
    }

    public function saveToDisk()
    {
         $this->manager->writeToFile();
    }
Run Code Online (Sandbox Code Playgroud)

但是我得到了这个错误:

ErrorException:传递给Pages :: __ construct()的参数1必须是PagesManagerInterface的实例,没有给出.

我试着在app/start/global.php中添加它:

App::bind('Pages',function(){

    return new Pages(new PagesManager);
});
Run Code Online (Sandbox Code Playgroud)

但似乎被框架忽略了,而且我也不知道如何将$ attribute数组插入到这个声明中.

我有点失落所以感谢任何帮助!

dependency-injection ioc-container inversion-of-control laravel

1
推荐指数
1
解决办法
3445
查看次数

使用Unity IOC时出现StackoverflowException

我在Winforms应用程序中通过将依赖项注入到表单的构造函数中来使用统一性(我知道这不是最佳实践),但是它确实起作用,但是当我尝试加载MDI表单时出现了stackoverflowexception。

有什么方法可以追踪团结正在试图解决的问题,并以某种方式找出正在发生的事情?

我有一个工作示例,我知道使用此“设计”可以工作。

我知道这不是一个理想的设计,我计划在线下引入一个Presenter,但现在应该可以了,我不知道为什么不这样

编辑:我知道我有例如互相引用的服务

public class Service1(IService2, IService3, IService4):IService1

public class Service2(IService1, IService5):IService2
Run Code Online (Sandbox Code Playgroud)

这会导致异常吗?

EDIT2:是的,我刚刚用第一次编辑中列出的循环引用创建了一个快速应用程序,并且得到了StackOverflowException-显然是不允许的。

inversion-of-control unity-container

1
推荐指数
1
解决办法
1721
查看次数

通过通用接口/抽象类实现使.NET Core DI自动解析类

.NET Core中是否有一种方法可以注册通用接口,并使其解析与某个实现相匹配的类.

例如,我有以下界面:

public interface IMapper<TFrom, TTo>
{
}
Run Code Online (Sandbox Code Playgroud)

我还有一个抽象类:

public abstract class Mapper<TFrom, TTo> : IMapper<TFrom, TTo>
{
    protected Mapper()
    {
        // some generic stuff
    }

    public abstract TTo Map(TFrom);
}
Run Code Online (Sandbox Code Playgroud)

然后我可以创建一个这样的实现:

public class UserMapper : Mapper<Domain.User, Entity.User>
{
    public override Entity.User Map(Domain.User from)
    {
        // do mapping
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法,使用默认的.NET Core DI进行注册IMapper<,>,让它自动解析类?

所以,例如,如果我在代码中的某个地方执行此操作:

class SomeClass
{
    public SomeClass(IMapper<Domain.User, Entity.User> mapper) {}
}
Run Code Online (Sandbox Code Playgroud)

它以某种方式知道它应该解决这个类UserMapper<Domain.User, Entity.User>

原因是手动注册每个映射器有点冗长,特定于实现.所以我希望Microsoft.DependencyInjection能够以某种方式自动解决其实现.

c# dependency-injection inversion-of-control .net-core

1
推荐指数
1
解决办法
2508
查看次数