English 中文(简体)
HTML 助手使用Castle Windsor 进行依赖注射
原标题:Dependency injection using Castle Windsor in HTML Helpers

因此,我正在做以.NET MVC 3为基础的应用,并使用Castle Windsor作为海委会的集装箱。

我无任何问题地使用它,而且工作非常顺利。现在我遇到这样的情况,我创建了一个HTML助手,这个助手正在暴露一种方法。

public static string GetContentByKey(string key)
{
     //I need to use a service that is resolved by Windsor here
}

问题是在这个帮手班上 我需要使用一种通过风速初始化的服务 但是由于这个帮手是一种静态的方法 你没有选择 建造者注射。

问题回答

我同意你可能设计有缺陷的意见。

话虽如此,如果你们有他们做这件事,你们有几条路可以走:

1) 使用服务定位器:在方法内解决所需的接口执行问题。有些人认为这是反模式的,是一种代码嗅觉。

2) 使用可初始化(可能从无效物体执行开始)的等级级静态字段:

public static class MyHelper
{
    private static IMyService service = new NullMyService();

    public static void Assign(IMyService instance)
    {
        service = instance;
    }

    public static string DoSomething(this HtmlHelper html)
    {
        return service.Whatever();
    }
}

然后,你从你的构成根(和现在的优胜任期一样)中,用分配方法来设定服务:

...
MyHelper.Assign(container.Resolve<IMyService>());
...

可能不能百分之百地感到舒适,但将产生预期的结果。





相关问题
Manually implementing high performance algorithms in .NET

As a learning experience I recently tried implementing Quicksort with 3 way partitioning in C#. Apart from needing to add an extra range check on the left/right variables before the recursive call, ...

Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

How do I compare two decimals to 10 decimal places?

I m using decimal type (.net), and I want to see if two numbers are equal. But I only want to be accurate to 10 decimal places. For example take these three numbers. I want them all to be equal. 0....

Exception practices when creating a SynchronizationContext?

I m creating an STA version of the SynchronizationContext for use in Windows Workflow 4.0. I m wondering what to do about exceptions when Post-ing callbacks. The SynchronizationContext can be used ...

Show running instance in single instance application

I am building an application with C#. I managed to turn this into a single instance application by checking if the same process is already running. Process[] pname = Process.GetProcessesByName("...

How to combine DataTrigger and EventTrigger?

NOTE I have asked the related question (with an accepted answer): How to combine DataTrigger and Trigger? I think I need to combine an EventTrigger and a DataTrigger to achieve what I m after: when ...

热门标签