2014-10-16 84 views
1

我正在編寫一個需要使用.NET Remoting與服務器進行通信的小型應用程序。我使用AutoFac註冊我的情況下,跑在何時被佈置我的遠程代理對象的一個​​問題,下面是一些示例代碼:處理「遠程處理代理對象」生命期的建議方法

 builder.Register(b => 
     { 
      var channel = new TcpClientChannel(); 
      // ... 
      var remoteObj = (IMyComponent)Activator.GetObject(typeof(IMyComponent), "tcp://..."); 
      return remoteObj; 
     }).As<IMyComponent>(); 

     // ... and then when using it: 

     using (var scope = this.container.BeginLifetimeScope()) { 

      var myComponent = scope.Resolve<IMyComponent>(); 

     } // <= An exception will be thrown here since AutoFac will try to call .Dispose on myComponent 

     // Later I realized that the exception can be fixed by specifying an "empty" OnRealease-behavior when registering the component, probably because AutoFac doesnt try to treat MyComponent like an IDisposable. 
     ... 
     }).As<MyIComponent>().OnRelease(c => { //Manual disposing here }); 

此異常引起了我的懷疑,如果我做的東西完全錯在這裏以及如何正確處理遠程代理的生命週期。我的方法有什麼不妥,即通過AutoFac「創建」並返回遠程代理?如果是這樣,遠程代理服務器的生命週期應該如何處理?

回答

1

There are some detailed docs on how Autofac handles disposal on the Autofac doc site.這可能有助於清除您的一些問題。

如果您有一個IDisposable組件,您不希望Autofac爲您調用Dispose,請將其註冊爲ExternallyOwned,並且自動處置將被禁用。

+0

感謝您的回答,ExternallyOwned將在這個特定的例子中有所需的效果(不要處置),雖然我的問題更多的是「處理遠程處理對象的生命期的方法」。 – 2014-10-20 05:38:46