相关疑难解决方法(0)

在C#中完成/处理模式

C#2008

我一直在研究这个问题,我仍然对一些问题感到困惑.我的问题如下

  1. 我知道如果你处理非托管资源,你只需要一个终结器.但是,如果您使用托管资源来调用非托管资源,您是否仍需要实现终结器?

  2. 但是,如果您开发一个不直接或间接使用任何非托管资源的类,您是否可以实现IDisposable该类,以便您的类的客户端可以使用'using statement'?

    是否可以接受实现IDisposable,以便您的类的客户端可以使用using语句?

    using(myClass objClass = new myClass())
    {
        // Do stuff here
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我在下面开发了这个简单的代码来演示Finalize/dispose模式:

    public class NoGateway : IDisposable
    {
        private WebClient wc = null;
    
        public NoGateway()
        {
            wc = new WebClient();
            wc.DownloadStringCompleted += wc_DownloadStringCompleted;
        }
    
    
        // Start the Async call to find if NoGateway is true or false
        public void NoGatewayStatus()
        {
            // Start the Async's download
                // Do other work here
            wc.DownloadStringAsync(new Uri(www.xxxx.xxx));
        }
    
        private void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
        {
            // …
    Run Code Online (Sandbox Code Playgroud)

.net c# idisposable finalizer

369
推荐指数
7
解决办法
17万
查看次数

你如何协调IDisposable和IoC?

我终于在C#中围绕IoC和DI缠绕我的头,并且正在努力解决一些问题.我正在使用Unity容器,但我认为这个问题适用范围更广.

使用IoC容器来分配实现IDisposable的实例让我感到害怕!你怎么知道你应该Dispose()?该实例可能是专门为您创建的(因此您应该Dispose()它),或者它可能是其生命周期在其他地方管理的实例(因此您最好不要).代码中没有任何内容告诉您,实际上这可能会根据配置发生变化!这对我来说似乎是致命的.

任何IoC专家都可以描述处理这种模糊性的好方法吗?

c# idisposable inversion-of-control unity-container

41
推荐指数
2
解决办法
1万
查看次数

IOC容器和IDisposable

我建议在使用IOC容器时,我应该改变这个:

class Foobar: IFoobar, IDisposable {};
Run Code Online (Sandbox Code Playgroud)

进入:

interface IFoobar: IDisposable{};
class Foobar : IFoobar{};
Run Code Online (Sandbox Code Playgroud)

我想知道这是否正常,或者它是否解决了一个问题并创造了另一个问题.它肯定解决了我非常想要这样做的问题:

using( IFoobar = myContainer.Resolve<IFoobar>() )
{ ... }
Run Code Online (Sandbox Code Playgroud)

现在我知道任何替代品都不会导致运行时错误.

另一方面,现在我的所有模拟对象也必须处理IDisposable.我是对的,大多数任何模拟框架都能轻松处理这个问题吗?如果是,那么也许这不是问题.

或者是吗?我应该注意另一个隐藏的问题吗?这当然发生,我认为如果我使用IoC容器没有单元测试/嘲讽,但对于真正的服务的独立性,那么这可能是因为也许只有我的交换服务,一个真正与非托管资源交易(和现在我是一个问题我必须在这些其他服务中实现空的"IDispose"操作).

即使是后一个问题,我想我可以忍受,为了获得使用上面演示的"使用"声明的能力.但是,我是遵循一个流行的惯例,还是我错过了一个完全不同的更好的解决方案?

idisposable ioc-container

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